Android 定时器实现图片的变换

作者:孵化恐龙蛋 时间:2021-05-28 00:33:13 

Android 定时器实现图片的变换

在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解是handler中存在一个队列问题,可以保证不产生阻塞。 

代码如下: 


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;

public class MainActivity extends Activity
{
 private LinearLayout linearlayout;

private ImageView main_imageview;

private int i = 0;

Timer timer = new Timer();

private Handler handler = new Handler()
 {
   @Override
   public void handleMessage(Message msg)
   {

Log.e("@@@", i + "");
     //index=msg.what;
     if (i > 6)
     {
       i = 0;
     }
     else
     {
       switch (i)
       {
       case 1:
         main_imageview.setImageResource(R.drawable.loader_frame_1);
         break;
       case 2:
         main_imageview.setImageResource(R.drawable.loader_frame_2);
         break;
       case 3:
         main_imageview.setImageResource(R.drawable.loader_frame_3);
         break;
       case 4:
         main_imageview.setImageResource(R.drawable.loader_frame_4);
         break;
       case 5:
         main_imageview.setImageResource(R.drawable.loader_frame_5);
         break;
       case 6:
         main_imageview.setImageResource(R.drawable.loader_frame_6);
         break;
       default:
         break;
       }
       linearlayout.invalidate();
     }
     super.handleMessage(msg);
   }
 };

/** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState)
 {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

initView();
 }

public void initView()
 {
   linearlayout = (LinearLayout) findViewById(R.id.background_main);
   main_imageview = (ImageView) findViewById(R.id.main_imageview);

timer.scheduleAtFixedRate(new TimerTask()
   {
     @Override
     public void run()
     {
       // TODO Auto-generated method stub
       i++;
       Message mesasge = new Message();
       mesasge.what = i;
       handler.sendMessage(mesasge);
     }
   }, 0, 500);
 }

@Override
 protected void onDestroy()
 {
   // TODO Auto-generated method stub
   timer.cancel();
   super.onDestroy();
 }
}

在这段代码中有两点需要注意: 

第一:在更新完图片后,需要刷新整个布局,linearlayout.invalidate(); 

第二:在用完定时器timer后,要在Activity * 掉的同时销毁定时器timer。

来源:http://blog.csdn.net/boyupeng/article/details/6316346

标签:Android,定时器
0
投稿

猜你喜欢

  • spring系列笔记之常用注解

    2022-02-21 16:15:04
  • Android封装实现短信验证码的获取倒计时

    2023-06-28 22:57:23
  • C#进制之间的相互转换详解

    2022-07-24 11:47:53
  • WPF使用WrapPanel实现虚拟化效果

    2021-07-04 14:53:53
  • SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码

    2021-06-23 16:48:08
  • C# 指针内存控制Marshal内存数据存储原理分析

    2021-09-22 04:05:00
  • JDK14新特性之switch表达式的实现

    2022-06-01 17:49:31
  • 官方详解HDFS Balancer工具主要调优参数

    2023-07-24 04:43:47
  • 23种设计模式(14)java迭代器模式

    2021-12-12 15:28:49
  • C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)

    2023-12-06 10:45:34
  • Java中的拦截器、过滤器、监听器用法详解

    2021-08-08 16:26:03
  • tk.mybatis如何扩展自己的通用mapper

    2022-02-16 04:10:17
  • JAVA内存模型(JMM)详解

    2023-11-23 16:54:32
  • Android 之Preference控件基本使用示例详解

    2022-10-20 23:42:34
  • ObjectMapper 如何忽略字段大小写

    2023-07-31 07:07:18
  • 详解IDEA中SpringBoot整合Servlet三大组件的过程

    2023-05-06 15:23:13
  • C#实现xml文件反序列化读入数据到object的方法

    2023-08-20 00:43:08
  • Java如何实现自定义异常类

    2023-06-21 23:44:01
  • Java8中对于LocalDateTime的序列化和反序列化问题

    2023-11-14 15:37:41
  • SpringMVC使用RESTful接口案例

    2021-10-10 20:03:45
  • asp之家 软件编程 m.aspxhome.com