Java Android-在while循环中显示画布时出现问题

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

我对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.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);
   }

如果触摸事件看起来很复杂,那么请先学习它们。与表演动画相比,它们是一个微不足道的话题。然后你就可以理解这些例子了。或者自己寻找更简单的例子(我们不是你的引擎)。