package com.android;
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;
public class TestActivity extends Activity {
private MyView myView;
private Handler mHandler;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
// 创建一个Handler
mHandler = new Handler();
// 调用Handler.post(Runnable r)方法
mHandler.post(new Runnable() {
// mHandler.post(Runnable) 中的Runnable 会在mHandler 所在的线程执行, 也就是View 所在的UI线程
// handler并没有新开一个线程啊 只是把runnable放进去而已
// 这样就可以跟handler都在主线程中 然后就可以更新ui了
// while是保证隔一定时间就放一个runnable进入
// 我们可以通过调用handler的post方法,
// 把Runnable对象(一般是Runnable的子类)传过去;
// handler会在looper中调用这个Runnable的Run方法执行。
// Runnable没有启动(线程的启动是用start()来启动的)
public void run() {
// 直接调用View.invalidate(),更新组件
myView.invalidate();
// 延迟5毫秒后执行线程
mHandler.postDelayed(this, 5);
}
});
setContentView(myView);
}
class MyView extends View {
private float x = 0f;
public MyView(Context context) {
super(context);
}
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);
}
}
}