Java Android-在while循环中显示画布时出现问题
我对Android和Java非常陌生,在尝试在while循环中重复显示画布时遇到了一个问题。直到onCreate方法结束并且我的while循环位于onCreate方法中,画布才会显示。代码如下:Java Android-在while循环中显示画布时出现问题,java,android,android-canvas,Java,Android,Android Canvas,我对Android和Java非常陌生,在尝试在while循环中重复显示画布时遇到了一个问题。直到onCreate方法结束并且我的while循环位于onCreate方法中,画布才会显示。代码如下: package com.example.clip_test; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Col
package com.example.clip_test;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.LinearLayout;
import android.os.SystemClock;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout ll=(LinearLayout)findViewById(R.id.rect);
ll.setBackgroundColor(Color.WHITE);
Bitmap bmp=Bitmap.createBitmap(480,800,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bmp);
Paint paint=new Paint();
while (true) {
//DISPLAY RED SQUARE
paint.setColor(Color.parseColor("#FF0000"));
canvas.drawRect(50,50,200,200,paint);
ll.setBackgroundDrawable(new BitmapDrawable(bmp));
SystemClock.sleep(250);
//DISPLAY BLUE SQUARE
paint.setColor(Color.parseColor("#0000FF"));
canvas.drawRect(50,50,200,200,paint);
ll.setBackgroundDrawable(new BitmapDrawable(bmp));
SystemClock.sleep(250);
}
}
}
我查阅了画布如何定期更新的其他示例,但代码涉及其他复杂问题(如处理触摸事件),我在习惯画布之前必须了解这些问题。有人能给我一个简单的代码来说明如何完成这个任务吗?声明一个要绘制的视图,然后重写该视图的onDraw方法以访问画布。这个答案()有一个例子 编辑:然后您可以在
onCreate
或onResume
中保留计时控件和while循环。为每种颜色声明一个油漆
,并在onDraw
中添加类似的内容:
@Override
protected void onDraw(Canvas canvas) {
if (wantToDrawRed) {
canvas.drawRect(50,50,200,200,redPaint);
}
if (wantToDrawBlue) {
canvas.drawRect(50,50,200,200,bluePaint);
}
super.onDraw(canvas);
}
有几种方法可以做到这一点。试着像这样更改代码
private Handler handler;
private BitmapDrawable bg1;
private BitmapDrawable bg2;
private LinearLayout ll;
private Runnable setBgRunnable1 = new Runnable() {
@Override
public void run() {
ll.setBackgroundDrawable(bg1);
handler.postDelayed(setBgRunnable2, 250);
}
};
private Runnable setBgRunnable2 = new Runnable() {
@Override
public void run() {
ll.setBackgroundDrawable(bg2);
handler.postDelayed(setBgRunnable1, 250);
}
};
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ll=(LinearLayout)findViewById(R.id.rect);
ll.setBackgroundColor(Color.WHITE);
Paint paint=new Paint();
//DISPLAY RED SQUARE
Bitmap bmp1=Bitmap.createBitmap(480,800,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bmp1);
paint.setColor(Color.parseColor("#FF0000"));
canvas.drawRect(50,50,200,200,paint);
bg1 = new BitmapDrawable(bmp1);
//CREATE BLUE SQUARE
Bitmap bmp2=Bitmap.createBitmap(480,800,Bitmap.Config.ARGB_8888);
canvas=new Canvas(bmp2);
paint.setColor(Color.parseColor("#0000FF"));
canvas.drawRect(50,50,200,200,paint);
bg2 = new BitmapDrawable(bmp2);
// CREATE HANDLER
handler = new Handler();
handler.postDelayed(setBgRunnable1, 250);
}
如果触摸事件看起来很复杂,那么请先学习它们。与表演动画相比,它们是一个微不足道的话题。然后你就可以理解这些例子了。或者自己寻找更简单的例子(我们不是你的引擎)。