2011-08-17 6 views
4

화면을 터치하는 곳에서 원을 그리는 간단한 Android 애플리케이션을 만들고 싶습니다. View (천천히)와 함께 작동하지만 SurfaceView는 사용하지 않습니다. 결과가 이상합니다 - 클릭하면 전체 이미지가 움직입니다. 또 다른 스레드에서 드로잉 함수를 호출하려고했지만 결과는 같습니다. 또한이 이상한 행동으로 또 다른 예를 발견했습니다 : http://android-er.blogspot.com/2010/05/android-surfaceview.html 나는 안드로이드 2.3.3, API 레벨 10과 함께 일합니다. 어떤 도움을 주시면 감사하겠습니다.Android의 SurfaceView가 깜박임

package com.samsung.sketchbook; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

public class SketchBook extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     BookView bookView = new BookView(this); 
     setContentView(bookView); 
    } 

    class BookView extends SurfaceView implements SurfaceHolder.Callback { 

     private SurfaceHolder holder; 
     private Paint paint = new Paint(); 
     private float x, y; 

     public BookView(Context context) { 
      super(context); 
      holder = getHolder(); 
      holder.addCallback(this); 
      paint.setColor(Color.WHITE); 
     } 

     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 

     } 

     public void surfaceCreated(SurfaceHolder holder) { 
      Log.d("BookView", "surfaceCreated!"); 
     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 

     } 

     @Override 
     public boolean onTouchEvent(MotionEvent motionEvent) { 
      x = motionEvent.getX(); 
      y = motionEvent.getY(); 
      Canvas canvas = holder.lockCanvas(null); 
      canvas.drawCircle(x, y, 3, paint); 
      holder.unlockCanvasAndPost(canvas); 
      return true; 
     } 

    } 

} 
+0

야, 문제는 해결 했습니까? – MeLight

답변

-1

SurfaceView을 사용하지 않는 것이 좋습니다.

제 경험에 따르면 View보다 나은 해결책은 아닙니다. 예, 을 효과적으로 사용하는 방법을 모른다면 View에 이르는 구현 클래스는 천천히, 이지만입니다.

invalidate() (모든 캔버스를 그립니다), 즉 invalidate(dirtyRect) (다시 그리기를 원하는 사각형을 정의하면 나머지 캔버스는 이전과 같이 유지됩니다)은 매우 빠릅니다.