Android循环问题
我不熟悉android,但不熟悉编程。下面的代码使android中默认可用的icon.png在屏幕上显示,或者至少应该显示出来。这不管用。有人能帮忙吗Android循环问题,android,loops,icons,Android,Loops,Icons,我不熟悉android,但不熟悉编程。下面的代码使android中默认可用的icon.png在屏幕上显示,或者至少应该显示出来。这不管用。有人能帮忙吗 > package com.android.test; import > android.app.Activity; import > android.content.Context; import > android.graphics.Bitmap; import > android.graphics.Bitmap
> package com.android.test; import
> android.app.Activity; import
> android.content.Context; import
> android.graphics.Bitmap; import
> android.graphics.BitmapFactory; import
> android.graphics.Canvas; import
> android.graphics.Color; import
> android.os.Bundle;
>
>
> import android.view.View; import
> android.view.Window;
>
> public class Android extends Activity
> { int x,y=10;
>
> @Override public void onCreate(Bundle
> savedInstanceState) {
> super.onCreate(savedInstanceState);
> requestWindowFeature(Window.FEATURE_NO_TITLE);
> setContentView(new Panel(this)); }
>
> class Panel extends View { public
> Panel(Context context) {
> super(context); }
>
> @Override public void onDraw(Canvas
> canvas) { Bitmap _scratch =
> BitmapFactory.decodeResource(getResources(),
> R.drawable.icon);
> canvas.drawColor(Color.BLACK); int
> n=1; while (n==1){ try {
> Thread.sleep(30); } catch
> (InterruptedException e) { }
> canvas.drawBitmap(_scratch, x, y,
> null); x+=2; y+=2;
>
> canvas.drawBitmap(_scratch, x, y,
> null); } } } }
我也是一名业余的Android开发人员,我想我记得读到过这样一篇文章,称Thread.Sleep()为解决方法是一个坏习惯。但是我可能错了。您的onDraw()方法永远不会返回。需要这样做。你的应用程序会在几秒钟后强制关闭吗?您必须在30毫秒后向UI线程发布一条消息以重新绘制,而不是在onDraw()中循环。在我的脑海里,试试这个:
class Panel extends View {
public Panel(Context context) {
super(context);
}
int x = 0;
int y = 0;
Bitmap _scratch = BitmapFactory.decodeResource(getResources(), R.drawable.icon);
@Override public void onDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(_scratch, x, y, null);
x+=2; y+=2;
this.postInvalidateDelayed(30);
}
}
当然,您需要添加一些代码,以在图标离开边缘后停止循环。onDraw用于渲染显示-一次。尝试在onDraw中执行此循环可能不是一个好主意
您可能希望尝试使用动画,而不是使用循环。在谷歌上搜索“安卓动画教程”或类似内容。你能去掉“>”字符并正确设置代码格式吗?哦,伙计。。。。。。非常感谢你。它起作用了。但是,请您解释一下“this.postInvalidateDelayed(30);”的作用是什么?活动是由一个主线程(也称为UI线程)运行的,该线程在消息队列中循环以选择要做的事情。postInvalidateDelayed()向队列中添加一条消息,表示在30毫秒后,需要重新绘制此视图。30毫秒后,主线程接收此消息并调用onDraw()方法。这也是应用程序不响应错误的来源。如果主线程处理消息的时间超过5秒,Android会认为这是个问题。这就是为什么不能在onDraw()内部循环。