2013-07-03 30 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); 

看看有没有从这段代码的任何有用的提取物。