2012-02-03 6 views
0

Android.My 응용 프로그램을 처음 사용하기 때문에 캔버스 서클을 반복해서 다시 그려야합니다. 그러나 다시 그리기 속도는 내가 원하는 것보다 적습니다. 어떻게 똑같이 늘릴 수 있습니까? > ImagePracActivity.java안드로이드 화면 다시 그리기 속도 향상

package com.pkg.ImagPrac; 

    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Window; 
    import android.view.WindowManager; 

    public class ImagePracActivity extends Activity { 
     //DrawView drawView; 
     movement mv; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // Set full screen view 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
             WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     requestWindowFeature(Window.FEATURE_NO_TITLE);  

     mv=new movement(getApplicationContext());    
     setContentView(mv);    
     mv.requestFocus();    
     } 
    } 

- -> movement.java

package com.pkg.ImagPrac; 

import android.content.Context; 
import android.content.Intent; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.util.Log; 
import android.view.Display; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.WindowManager; 

public class movement extends View implements OnTouchListener{  
    Display display; 
    float x=0,y=0; 
    Paint paint=new Paint(); 
    private boolean flag; 

    public movement(Context context) { 
     super(context);   
     setFocusable(true); 
     setFocusableInTouchMode(true);  
     this.setOnTouchListener(this); 

     paint.setColor(Color.BLUE); 
     paint.setAntiAlias(true); 

     display = ((WindowManager) 
     context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
     x = 0; 
     y = display.getHeight();    
    } 

     @Override 
     protected void onDraw(Canvas canvas) {    

      if(x<(display.getWidth()/2)) 
     { 
      canvas.drawCircle(x++, y--, 5, paint); 
     }   
      else if(x<(display.getWidth())) 
     { 
      canvas.drawCircle(x++, y++, 5, paint); 
     }  

     this.invalidate(); 
    }  
      public boolean onTouch(View arg0, MotionEvent arg1) { 
     // TODO Auto-generated method stub 
     return false; 
    }  
} 

답변

0

시도

는 다음과 같이

내 코드입니다 SurfaceVi를 사용하라는 조언을 해줄 것입니다. SurfaceView가 더 빠르며 별도의 스레드에서 모든 그리기 논리를 가질 수 있기 때문에 View 대신 ew 클래스를 사용할 수 있습니다. SurfaceView에 대한 자세한 내용은 http://developer.android.com/guide/topics/graphics/2d-graphics.html

+0

귀하의 도움에 감사드립니다. 그것은 내가 어떤 진보를 만드는 것을 도왔다. 그러나 별도의 스레드를 만들어야하는지 또는 Surfaceview 자체의 메서드 내에서 드로잉을 수행해야 하는지를 알고 싶습니다. – Jay

0

mPaint = new Paint(); 
mPaint.setAntiAlias(true); 
mPaint.setDither(true); 
mPaint.setColor(Color.BLUE); 
mPaint.setStyle(Paint.Style.STROKE); 
mPaint.setStrokeJoin(Paint.Join.ROUND); 
mPaint.setStrokeCap(Paint.Cap.ROUND); 
mPaint.setStrokeWidth(5);