自定义视图View的学习跟Handler.post更新视图的应用
自定义视图View的学习和Handler.post更新视图的应用
package com.easyway.android.listviews; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.os.Bundle; import android.os.Handler; import android.view.View; /** * 自定义视图View的学习和Handler.post更新视图的应用 * * @author longgangbai * */ public class TestHandler2 extends Activity { private MyView myView; private Handler mHandler; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); myView = new MyView(this); //创建处理器 mHandler = new Handler(); //执行更新的线程 mHandler.post(update); //展示视图 setContentView(myView); } private Runnable update = new Runnable() { public void run() { //刷新视图的 myView.update(); // mHandler.postDelayed(update, 5); } }; /** * 自定义视图的使用 * @author Administrator * */ class MyView extends View{ private float x = 0f; public MyView(Context context) { super(context); } public void update(){ postInvalidate(); } /** * 重写绘制界面的方法 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); x+=1; Paint mPaint = new Paint(); mPaint.setColor(Color.BLUE); canvas.drawRect(x, 40, x+40, 80, mPaint); } } }
package com.easyway.android.listviews; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.Window; /** * Handler更新视图的一种方法 * @author longgangbai * */ public class TestHandler extends Activity { protected static final int GUIUPDATEIDENTIFIER = 0x101; Thread myRefreshThread = null; BounceView myBounceView = null; /** * 处理器的类 */ Handler myHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case TestHandler.GUIUPDATEIDENTIFIER: myBounceView.invalidate(); break; } super.handleMessage(msg); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.myBounceView = new BounceView(this); this.setContentView(this.myBounceView); //启动线程 new Thread(new myThread()).start(); } class myThread implements Runnable { public void run() { while (!Thread.currentThread().isInterrupted()) { Message message = new Message(); message.what = TestHandler.GUIUPDATEIDENTIFIER; TestHandler.this.myHandler.sendMessage(message); try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } } } }