2014-01-14 31 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); 
} 

有幾種方法可以做到這一點。