Android使用handler和Runnable结合,自定义View更新UI的Demo
来源:互联网 发布:网络剧 有毒 全集 编辑:程序博客网 时间:2024/06/07 07:50
前三周在修改android4.2锁屏UI,刚做android好多知识不会啊,里面有个动画效果是一个箭头向下来回跑动。看了网上的一些知识,好像可以用Frame动画实现。。可惜不会。后来,又看到说用新Thread来更新UI,然后自己尝试做了个Demo。源码如下:
MyView.java:
package com.example.handlerupdateuidemo;import android.content.Context;import android.content.res.Resources;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.graphics.Paint;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.util.Log;import android.view.View;public class MyView extends View { private int mimageId = R.drawable.hys_ic_lockscreen_arrow_ani_1; private Thread myThread; Paint myPaint; public MyView(Context context) { super(context); } public MyView(Context context,AttributeSet attrs) { super(context); // TODO Auto-generated constructor stub myPaint = new Paint(); myThread = new Thread(new handlerDrawableUpdateRunnable()); myThread.start(); } @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub myPaint.setAntiAlias(true); Resources res=getResources(); Log.e("updateHandler", "onDraw mimageId == " + mimageId); //Drawable drawable=res.getDrawable(mimageId); canvas.drawBitmap(BitmapFactory.decodeResource(res,mimageId),200,200,myPaint); super.onDraw(canvas); } private static final int MSG_UPDATE_DRAWABLE = 0x101; private static int images[] = { R.drawable.hys_ic_lockscreen_arrow_ani_1, R.drawable.hys_ic_lockscreen_arrow_ani_2, R.drawable.hys_ic_lockscreen_arrow_ani_3, R.drawable.hys_ic_lockscreen_arrow_ani_4, R.drawable.hys_ic_lockscreen_arrow_ani_5, R.drawable.hys_ic_lockscreen_arrow_ani_6 }; //private Thread updateThread; class handlerDrawableUpdateRunnable implements Runnable { public void run() { while (!Thread.currentThread().isInterrupted()) { for (int i = 0; i < images.length - 1; i++) { Message msg = updateHandler.obtainMessage(); msg.what = MSG_UPDATE_DRAWABLE; Bundle b = new Bundle(); try { Thread.sleep(200); b.putInt("imgId", images[i]); msg.setData(b); updateHandler.sendMessage(msg); } catch (Exception e) { e.printStackTrace(); } if (i >= images.length - 1) { i = 0; } } } } } Handler updateHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case MSG_UPDATE_DRAWABLE: Bundle b = msg.getData(); int imageId = b.getInt("imgId"); if(imageId <= 0){ Log.e("updateHandler", "updateHandler imageId == " + imageId); return; } mimageId = imageId; invalidate(); break; default: break; } super.handleMessage(msg); } };}
添加的资源图片:
然后在布局文件activity_main.xml中添加
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <com.example.handlerupdateuidemo.MyView android:id="@+id/myview" android:layout_width="wrap_content" android:layout_height="wrap_content" /></RelativeLayout>
最后一个Demo诞生了。。。对于一个菜鸟来说还是挺有成就感的。。
留下的疑问:
1.一个像上述这样的线程如果不主动停止,那它什么条件下会自己停止呢?
2.一个像上述这样的线程如果不主动停止,占用的资源多不多啊?
有路过的大神帮忙解答,谢谢了
0 0
- Android使用handler和Runnable结合,自定义View更新UI的Demo
- Android:UI更新方法一:Handler+View.invalidate+Thread+Runnable
- 关于利用Handler和实现Runnable的class更新UI的小demo
- android中Handler、Thread、Runnable更新UI的思考
- android使用post(Runnable)更新UI的误区
- Android开发中更新UI时runOnUIthread(Runnable)与Handler.post(Runnable)的区别及如何选择
- 线程里更新UI的两种方法:Thread+Handler和Runnable
- Android:UI更新方法二:View.postInvalidate+Thread+Runnable
- Android 自定义 View 的重绘和更新使用
- android解决:使用多线程和Handler同步更新UI
- How:Thread、Runnable和Handler的完美结合
- 【Android UI】自定义圆形SeekBar和自定义Dialog的结合使用
- runOnUIThread、Handler、AsyncTask与子线程结合使用更新UI
- android 中Handler 和Thread 以及 Handler和Runnable 的使用
- Android Handler的使用 --- 循环执行更新UI显示
- Android使用Handler异步更新UI
- Android使用Handler实时更新UI
- Android Handler使用详解之UI更新
- android实现截图功能
- [LeetCode] Longest Substring Without Repeating Characters
- hdu 1007找最短距离的点
- select with reglar file descriptor
- gdb常用命令
- Android使用handler和Runnable结合,自定义View更新UI的Demo
- 粒子编辑器下载
- 未完待续的几个命令
- 使用 int? 来确保值类型也可为null
- 第5周作业-打字成绩判断程序TouchType
- “十天一本书”之38 《拖延心理学》有感
- JPA使用动态的SCHEMA配置方法
- C语言的发展及其版本
- 新疆首富500亿书画收藏是庞氏骗局?