2014-01-14 2 views
0

저는 Android와 Java에 매우 익숙하며 while 루프에서 캔버스를 반복적으로 표시하려고 할 때 문제가 있습니다. onCreate 메서드가 끝나고 while 루프가 onCreate 메서드에있을 때까지 캔버스가 표시되지 않는 것 같습니다. 여기에 코드입니다 :안드로이드 - 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 루프를 onCreate 또는 onResume에 남겨 둘 수 있습니다. 각 색상에 대한 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); 
} 

. 터치 이벤트가 복잡하고 먼저 알아주십시오 보일 경우

관련 문제