`
venus585625
  • 浏览: 253193 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

转载:Android 小項目之--消息、線程、動畫顯示圖片(附源碼)

阅读更多
一、    角色描述

1.Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。

2.Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到Message Queue里;或者接收Looper(从Message Queue取出)所送来的消息。

3. Message Queue(消息队列):用来存放线程放入的消息。

4.线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程序里,可以定义Handler的子类别来接收Looper所送出的消息。



在你的Android程序里,新诞生一个线程,或执行 (Thread)时,并不会自动建立其Message Loop。

Android里并没有Global的Message Queue数据结构,例如,不同APK里的对象不能透过Massage Queue来交换讯息(Message)。

例如:线程A的Handler对象可以传递消息给别的线程,让别的线程B或C等能送消息来给线程A(存于A的Message Queue里)。

线程A的Message Queue里的讯息,只有线程A所属的对象可以处理。

使用Looper.myLooper可以取得当前线程的Looper对象。

使用mHandler = new EevntHandler(Looper.myLooper()); 可用来构造当前线程的Handler对象;其中,EevntHandler是自已实现的Handler的子类别。

使用mHandler = new EevntHandler(Looper.getMainLooper()); 可诞生用来处理main线程的Handler对象;其中,EevntHandler是自已实现的Handler的子类别。



这样描述可能太抽像,下面举几个实际的例子来说明:

二、    举例

1. 同线程内不同组件间的消息传递

Looper类用来管理特定线程内对象之间的消息交换(Message Exchange)。你的应用程序可以产生许多个线程。而一个线程可以有许多个组件,这些组件之间常常需要互相交换讯息。如果有这种需要,您可以替线程构造一个Looper对象,来担任讯息交换的管理工作。Looper对象会建立一个MessageQueue数据结构来存放各对象传来的消息(包括UI事件或System事件等)。如下图:


每一个线程里可含有一个Looper对象以及一个MessageQueue数据结构。在你的应用程序里,可以定义Handler的子类别来接收Looper所送出的消息。

 --------------------------打醬油---------------------------

運行效果圖:




  繼上篇文章顯示時針的例子,這次在android線程裏面我又加入了動畫的方式,讓線程更好的幫助我們做更好的動畫效果,本例子,將用到四張圖片,每張圖片出來的顯示方式都不一樣,每隔三秒顯示一張不同的圖片,其顯示方式都不一樣,具體操作看代碼:



    private static final int my_key=0x123;
    private int a=0;
    private int[] myImage={
            R.drawable.aa,
            R.drawable.bb,
            R.drawable.cc,
            R.drawable.dd
    };
動畫效果的方案你可以參考:http://www.cnblogs.com/TerryBlog/archive/2010/05/30/1747311.html或者http://www.cnblogs.com/TerryBlog/archive/2010/05/31/1748628.html



線程的效果方案你可以參考:http://www.cnblogs.com/TerryBlog/archive/2010/06/01/1749516.html

本篇不過多解釋代碼,有任何問題可以參考以上三篇文章,下麵給出效果的全部代碼:



代码
package cn.terry;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.view.animation.ScaleAnimation;
import android.view.animation.TranslateAnimation;
import android.widget.*;
public class testHandler extends Activity implements Runnable {
    private static final int my_key=0x123;
    private int a=0;
    private int[] myImage={
            R.drawable.aa,
            R.drawable.bb,
            R.drawable.cc,
            R.drawable.dd
    };
    private Handler myHandler;
    private Thread myThread;
    private ImageView myImageView;
    private Animation myAnimationAlpha;
     private Animation myAnimationScale;
        private Animation myAnimationTranslate;
        private Animation myAnimationRotate;


    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myImageView=(ImageView)findViewById(R.id.ImageView01);
        myAnimationAlpha=new AlphaAnimation(0.1f, 1.0f);
        myAnimationAlpha.setDuration(3000);
        myAnimationScale=new ScaleAnimation(0.0f, 1.4f, 0.0f, 1.4f,
                Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        myAnimationScale.setDuration(3000);
       
        myAnimationTranslate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
        myAnimationTranslate.setDuration(3000);
       
       myAnimationRotate=new RotateAnimation(0.0f, +350.0f,
               Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
       myAnimationRotate.setDuration(3000);
       // myLinearLayout.setBackgroundColor(Color.WHITE);
        myHandler=new Handler()
        {
            @Override
            public void handleMessage(Message msg) {
                // TODO Auto-generated method stub
                switch (msg.what) {
                case testHandler.my_key:
                    switch (a) {
                    case 0:
                        myImageView.startAnimation(myAnimationAlpha);
                       
                        break;
                    case 1:
                        myImageView.startAnimation(myAnimationScale);
                      
                        break;
                    case 2:
                        myImageView.startAnimation(myAnimationTranslate);
                       
                        break;
                    case 3:
                        myImageView.startAnimation(myAnimationRotate);
                      
                        break;
                    default:
                        break;
                    }
                    myImageView.setImageResource(myImage[a-1]);
                    myImageView.setScaleType(ImageView.ScaleType.FIT_XY);
                    //myImageView.setLayoutParams(new LayoutParams(300, 200));
                   
                     if(a==myImage.length)
                     {
                         a=0;
                     }
                   
                    break;

                default:
                    break;
                }
                super.handleMessage(msg);
            }
        };
       
        myThread=new Thread(this);
        myThread.start();
    }
    @Override
    public void run() {
        // TODO Auto-generated method stub
        try {
             do
             {
                 a++;
                Thread.sleep(4000);
                 Message msg=new Message();
                 msg.what=testHandler.my_key;
                 myHandler.sendMessage(msg);
             }
             while(Thread.interrupted()==false);
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
       
       
       
       
    }
}
转载出:http://www.cnblogs.com/TerryBlog/archive/2010/06/02/1749942.html
分享到:
评论

相关推荐

    测试Android的线程、消息以及动画显示图片的样例源码.rar

    一个测试Android的线程、消息以及动画显示图片的样例源码,比较散的一个例子,虽然没有完成什么完整的功能,不过演示了android线程的应用,和消息以及以动画效果显示一张图片的功能,这些在android的开发中,似乎...

    93个android项目源码41-60(apk+源码+图片+文档)-共五卷

    "93个android项目源码41-60(apk+源码+图片+文档)-共五卷" 提供了丰富的实践案例,涵盖了从基础应用到复杂功能的多种应用场景。这个压缩包包含了41到60号的10个Android项目,每个项目都提供了apk安装包、源代码、...

    Android高级应用源码-100多个Android 实例集合.zip

    "Android高级应用源码-100多个Android实例集合.zip" 提供了一大批实际应用案例,这对于开发者来说是一份宝贵的资源。通过研究这些源码,我们可以学习到如何在Android平台上实现各种复杂功能,提高自己的编程技巧和...

    93个android项目源码01-20(apk+源码+图片+文档)-共五卷

    这些资料包包含的是93个Android项目的源代码,涵盖了从01到20的不同项目,每个项目都提供了APK安装包、源代码、相关的图片资源以及文档,总计分为五个卷。这样的资源对于学习和理解Android应用开发具有极高的价值,...

    疯狂Android讲义源码11-19章

    《疯狂Android讲义》是李刚...通过这些源码,读者不仅能学习到Android开发的基本概念,还能掌握实际项目开发中的技巧和最佳实践。同时,这也将是检验理论知识与实际操作结合的绝佳机会,对提升个人技能有着显著的帮助。

    Android歌词秀源代码-Android歌词工程文件-Android源码

    在Android平台上,开发一款歌词显示应用,如"Android歌词秀",涉及到许多核心技术和组件。以下将详细解析这个项目的源代码及其关键知识点。 首先,"Android歌词秀"是一款能够实时同步显示歌曲歌词的应用,它需要...

    Android项目应用源码-MIUI录音机源码.zip

    MIUI录音机是小米公司为Android系统开发的一款录音应用程序,其源码的公开为开发者提供了深入理解Android音频处理和UI设计的机会。这份源码包含了MIUI录音机的完整实现,可以作为Android开发者学习和研究的一个宝贵...

    Android程序源码--贪吃蛇

    以下是对这个“Android程序源码--贪吃蛇”项目的详细解析: 1. **Android环境搭建**:首先,你需要安装Android Studio,这是Google官方提供的集成开发环境(IDE),用于编写、调试和运行Android应用。它包含了一个...

    android小游戏源码.rar

    【Android小游戏源码详解】 Android小游戏源码是一个深入学习Android应用程序开发的重要资源,它涵盖了从基本的游戏架构到复杂的交互逻辑的各个层面。通过分析和理解这些源码,开发者可以提升自己的编程技能,学习...

    Android小游戏源码---喂养小动物

    《Android小游戏源码——喂养小动物》是一个适合初学者研究和学习的游戏开发项目,它提供了深入了解Android游戏编程的机会。这个游戏的核心概念是交互式的宠物养成,玩家需要照顾和喂养虚拟的小动物,让它们健康成长...

    Android小游戏源码--打地鼠

    【Android小游戏源码--打地鼠】是一款初学者在学习Android编程一周后,用一天时间完成的简单游戏项目。这个游戏的开发过程展示了Android应用的基本构建和游戏逻辑的实现,是初学者进阶的重要实践。 首先,我们要...

    Android 显示GIF动画源码

    在Android平台上,显示GIF动画是一项常见的需求,无论是用于加载指示器、表情符号还是其他动态效果。本示例源码“GifViewDemo”提供了一种实现方式,旨在帮助开发者理解如何在Android应用中集成并播放GIF动图。下面...

    疯狂android讲义源码11-19章

    《疯狂Android讲义》是李刚先生撰写的一本深度解析Android开发的经典著作,深受广大开发者喜爱。源码11-19章涵盖了Android应用开发的多个核心领域,为读者提供了丰富的实践材料。以下是对这些章节涉及知识点的详细...

    93个android项目源码61-80(apk+源码+图片+文档)-共五卷

    这些Android项目源码集合提供了61到80号的93个项目的完整资源,包括APK安装包、源代码、相关图片以及文档资料。这样的学习材料对于深入理解Android开发至关重要,因为它们涵盖了真实世界应用的各种场景和技术实现。...

    Android开发必备资料之50例源码

    ### Android开发必备资料之50例源码 在Android开发领域,掌握丰富的源代码实例能够极大地提升开发者的技能水平,并帮助他们快速理解复杂的概念和技术细节。以下是对“Android开发必备资料之50例源码”中提及的部分...

    Android图片处理源码

    这个压缩包文件“Android图片处理源码”很可能包含了一些用于Android平台的图片处理库或者示例代码,帮助开发者更好地理解和实现图片的加载、显示、裁剪、滤镜效果、压缩等功能。下面我们将深入探讨Android图片处理...

    Android 优秀经典项目源码(共46个项目).zip

    同时,这个项目也涉及到多线程处理、消息推送和社交功能的集成,这些都是Android应用开发中的核心技能。 AndroidPlayer则是仿酷狗播放器的应用,它涉及到音乐播放、歌曲列表管理、播放控制等功能。开发者可以在这里...

    Android项目应用源码-高仿人人网客户端源码.zip

    该压缩包文件“Android项目应用源码-高仿人人网客户端源码.zip”提供了一个针对Android平台的项目源代码,其目标是模仿人人网客户端的功能和界面设计。这个源码库对于想要学习Android开发,尤其是社交应用开发的...

    Android 炫酷相册源码-IT计算机-毕业设计.zip

    在Android平台上,构建一个炫酷的相册应用是许多开发者的目标,特别是在毕业设计阶段,这样的项目可以帮助学生将理论知识转化为实际应用。这个“Android炫酷相册源码”是一个很好的学习资源,它涵盖了多个Android...

Global site tag (gtag.js) - Google Analytics