Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中绘制SurfaceView_Android_Draw_Surfaceview_Rect - Fatal编程技术网

如何在Android中绘制SurfaceView

如何在Android中绘制SurfaceView,android,draw,surfaceview,rect,Android,Draw,Surfaceview,Rect,我想在用户触摸屏幕时在SurfaceView上画一个矩形。当他们移动手指时,它会随之移动矩形。用户还可以调整Rect的大小。基本上它是一个选择工具 到目前为止,我有以下代码: private void selectPoints(){ //retrieve X and Y values from touch surfaceView.setOnTouchListener(new View.OnTouchListener() { @Override pu

我想在用户触摸屏幕时在SurfaceView上画一个矩形。当他们移动手指时,它会随之移动矩形。用户还可以调整Rect的大小。基本上它是一个选择工具

到目前为止,我有以下代码:

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;                        
        }
    });     
}
然而,我不确定如何利用浮面视图。有什么建议/帮助吗


谢谢大家!

从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()调用

明白了。我在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);

看看这段代码中是否有有用的摘录。

谢谢@Raj的回复。我不会使用GLSURFACHEVIEW,因为我不需要绘制3D图像。我相信使用SurfaceView和OnDraw()方法可以实现我的目标。。。这只是关于如何做到这一点。