2014-01-14 41 views
0

我对Android和Java非常陌生,在尝试在while循环中重复显示画布时遇到问题。在onCreate方法结束并且我的while循环位于onCreate方法中之前,画布似乎不会显示。下面是代码:Android - 在while循环中显示画布时遇到问题

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); 

     } 

    } 

} 

我抬起头的其他例子如何画布定期更新,但代码涉及其他并发症(如处理触摸事件),我有习惯画布前理解。任何人都可以告诉我一个关于如何完成这个任务的简单代码?

+0

代码如果触摸事件看似复杂,那么请首先学习他们。与执行动画相比,它们是一个微不足道的话题。然后你可以理解这些例子。或者自己寻找更简单的例子(我们不是你的引擎)。 – Torben

回答

0

试图改变这样的

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); 
    } 
-1

声明一个视图来绘制,然后重写该视图的onDraw方法以访问画布。这个答案(canvas not drawing in java android)有一个例子。

编辑:那么你可以让你的时间控制和while循环在onCreateonResume。声明每种颜色有一个paint,并把这样的事情在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); 
} 

有几种方法可以做到这一点。