2013-07-03 69 views
0

我想在用戶觸摸屏幕時在繪圖上繪製矩形。當他們移動手指時,它會隨着它移動Rect。用戶也可以調整Rect。基本上它是一個選擇工具。如何在Android上繪製SurfaceView

到目前爲止,我有以下代碼:

private void selectPoints(){ 
    //retrieve X and Y values from touch 
    surfaceView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent pos) { 
      int eventAction = pos.getAction(); 
      switch (eventAction) { 
       case MotionEvent.ACTION_DOWN: 
        Log.d("X",String.valueOf(pos.getX())); 
        Log.d("Y",String.valueOf(pos.getY())); 
        break; 

       case MotionEvent.ACTION_UP: 
        Log.d("X",String.valueOf(pos.getX())); 
        Log.d("Y",String.valueOf(pos.getY())); 
        break; 
      }  

      return true;       
     } 
    });  
} 

但是我不確定如何繪製到SurfaceView。任何建議/幫助?

謝謝!

回答

1

實現從GLSurfaceView.Renderer界面的呈現器和用於提供下列方法實現:

public void onSurfaceCreated(GL10 gl, EGLConfig config) { 
    // TDOD 
} 

public void onSurfaceChanged(GL10 gl, int w, int h) { 
    // TDOD 
} 

public void onDrawFrame(GL10 gl) {  
    // You would draw here 
} 

的onDrawFrame()方法可通過您的surfaceView.requestRender被調用();

+0

感謝您的回覆@Raj。我不會使用GLSurfaceView,因爲我不需要繪製3D圖像。我相信我可以使用SurfaceView和OnDraw()方法實現我的目標......它只是關於如何實現這一點。 – LKB

1

明白了。我在Android中使用SurfaceView作爲我的自定義相機。我不確定這是否會對你有所幫助。但是,這是我要做的事:

public class CameraPreview extends SurfaceView{ 

    private SurfaceHolder mHolder; 
    private Camera mCamera;  

    public CameraPreview(Context context, Camera camera) { 
    super(context); 
    // Rest of the code for initialization 
    } 

    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
    // set preview size and make any resize, rotate or 
    // reformatting changes here 

    // start preview with new settings 
    try { 
     mCamera.setPreviewDisplay(mHolder); 
     mCamera.startPreview(); 

    } catch (Exception e){ 
     Log.e("CameraPreview : surfaceChanged()", "Error starting camera preview: " + e.getMessage(),e); 
    } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
    try { 
     if (mCamera != null) { 
      mCamera.setPreviewDisplay(holder); 
      mCamera.startPreview(); 
     } 
    } catch (IOException e) { 
     Log.e("CameraPreview : surfaceCreated()", "Error setting camera preview: " + e.getMessage(), e); 
    } 
    } 

    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
    } 

然後在我的活動我初始化SurfaceView如下:

cameraPreview = new CameraPreview(this, mCamera); 
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
preview.addView(mPreview); 

看看有沒有從這段代碼的任何有用的提取物。