[code="java"]
package com.rock;
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.os.Looper;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;
public class RockActivity extends Activity {
/*
- 动态图形的绘制基本思路是,创建一个类继承View(或surfaceView)覆盖
- onDraw()方法,使用 Canvas对象在界面上绘制不同的图形,使用invalidate()
-
方法刷新界面 。下面是一个弹球实例 运用动态图形绘制基本思路。
*/public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);RockView rockView=new RockView(this, null); setContentView(rockView);
}
class RockView extends View implements Runnable{
private int x=20,y=20; protected void onDraw(Canvas canvas) { //实例化画笔 Paint paint=new Paint(); //设置画笔颜色 paint.setColor(Color.GREEN); canvas.drawCircle(x, y, 10, paint); super.onDraw(canvas); } public RockView(Context context, AttributeSet attrs) { super(context, attrs); //获得焦点 setFocusable(true); new Thread(this).start(); } /* *E/AndroidRuntime( 4582): java.lang.RuntimeException: * Can't create handler inside thread that has not called Looper.prepare() * * 解决方法之一 在 run()方法 前 加Looper.prepare() 末尾 加Looper.loop(); */ public void run() { Looper.prepare(); RefreshHandler refreshHandler=new RefreshHandler(); while(!(Thread.currentThread().isInterrupted())){ Message msg=new Message(); msg.what=0x101; refreshHandler.sendMessage(msg); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } Looper.loop(); } class RefreshHandler extends Handler{ public void handleMessage(Message msg) { if(msg.what==0x101){ RockView.this.update(); RockView.this.invalidate(); } super.handleMessage(msg); } } private void update(){ int height=getHeight(); y+=5; if(y>=height){ y=20; } }
}
}
[/code]
这个 handler数据可以发送,为什么 接受不了呢? 求指教