在读API,我们可以发现J2ME中Canvas的repaint()与Android中 View的invalidate()/postInvalidate()方法实现了相同的功能(连说明文字几乎都一样…), 但是invalidate()/postInvalidate()两者却有着区别:invalidate()只能在UI这个线程里通过调用onDraw(Canvas canvas)来update屏幕显示,而postInvalidate()是要在non-UI线程里做同样的事情的。
<!--EndFragment-->
代码如下:
先创建入口类,其中定义一个
public class AndroidActivity extends Activity implements Config {
static BirdUI image;
static int id1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置当前Activity界面布局
setContentView(R.layout.main);
}
}
BirdUI类继承了ImageView,可以直接通过对象调用invalidate()/postInvalidate(),其中onDraw(Canvas canvas)是mageView的自己的方法。 BirdUI类中有两给方法:
public void showImage() {
// 设置bitmap的图片资源
bitmap = Bitmap.createBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.bird1));
// 设置bitmap1的图片资源
bitmap1 = Bitmap.createBitmap(BitmapFactory.decodeResource(
getResources(), R.drawable.pig1));
}
// 重写onDraw方法
public void onDraw(Canvas canvas) {
// 执行父类的onDraw方法
super.onDraw(canvas);
if (bitmap != null) {
// 遍历小猪线程,绘制小猪
for (PigThread pig : pigs) {
// 画小猪
canvas.drawBitmap(bitmap1, pig.x, pig.y, paint);
}
}
// 在BirdThread.xx,BirdThread.yy坐标处画图bitmap图形
// 画小鸟
//System.out.println("BirdThread.xx" + BirdThread.xx + "BirdThread.yy"
//+ BirdThread.yy);
if (bitmap != null) {
canvas.drawBitmap(bitmap, BirdThread.xx, BirdThread.yy, paint);
}
}
在主类运用线程,1,在线程里启动小猪线程
2,启动小鸟线程
代码如下:
new Thread() {
public void run() {
while (true) {
try {
sleep(1500);
// 创建小猪对象
PigThread pig = new PigThread();
// 启动小猪对象
pig.start();
// 添加到在接口Config中定义ArrayList<PigThread> // pigs=newArrayList<PigThread>();
// 便于遍历
pigs.add(pig);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}.start();
// 创建小鸟对象
BirdThread bbar = new BirdThread();
// 启动线程
bbar.start();
他不是运用在本线程里,而是非本线程里。不能引用invalidate(),而只能 引postInvalidate。才能起到嵌套线程的作用。他不是運用在本线程里,而是非本线程里。
生命周期的诠释
http://xiaoruanjian.iteye.com/blog/1369325
呵呵,我觉得很全面,里面下了功夫。
请各位前辈指点,如有改正的地方,请各位前辈指正,呵呵额,谢谢。
各位同仁,也可以提意见,呵呵,谢谢。