2013-05-24 4 views
0

나는 물건을 그리기 위해 처음으로 사용자 정의 Surface View를 만들었습니다. 시각적으로 묘사하기 위해 녹색 배경에 선과 원을 그린다. 그런 다음, 나는 녹색 배경을 제거하고 라이브 카메라 미리보기를 배경으로 사용하기로 결정했습니다. 이것은 내가 시도한 것이지만 아래에서 작동하지는 않습니다. 카메라 뷰와 사용자 정의 표면 뷰가 모두 생성되지만 카메라 뷰만 표시됩니다. 터치했을 때 x, y 값을 출력하는이 사용자 정의보기의 TouchListener를 가졌기 때문에 내 사용자 화 된 표면 뷰도 작성되었다고 확신합니다. 하지만 내 사용자 지정 드로잉은 내가 원하는대로 카메라 미리보기 위에 표시되지 않습니다. 도와주세요!!카메라 표면보기에서 안드로이드 사용자 정의 표면보기 드로잉

gameview.xml 파일 :

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/mainlayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
</FrameLayout> 

카메라보기 : VirtuaParkView 이름

public class CameraView extends SurfaceView implements SurfaceHolder.Callback{ 



Camera camera; 

public CameraView(Context context, Camera c) { 
    super(context); 
    camera = c; 
    getHolder().addCallback(this); 
    getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    // TODO Auto-generated constructor stub 
} 

public void surfaceCreated(SurfaceHolder arg0) { 
    // TODO Auto-generated method stub 
    try { 
     camera.setPreviewDisplay(getHolder()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    camera.startPreview(); 
} 
} 

사용자 정의 표면보기 : 나는 스레드에서 지속적으로 호출되는의 onDraw() 메소드를 사용하여 물건을 그리는 곳이다 . 또한 SurfaceHolder.Callback을 구현합니다. 간결함을 위해 여기에 작성된 코드는 없습니다. 이 모두 함께 넣어 어떻게하는지

는 :

CameraView cView = new CameraView(getApplicationContext(),Camera.open()); //get Camera View 
    VirtuaParkView vParkView = new VirtuaParkView(getApplicationContext()); // get custom surface view 
    setContentView(R.layout.gameview); //set the Frame layout 
    FrameLayout fl = (FrameLayout)findViewById(R.id.mainlayout); // get the layout root 
    fl.addView(cView); //add camera view 
    fl.addView(vParkView,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT)); //add custom drawing 

답변

0

나는 당신의 VirtualParkView 어떻게 생겼는지 알고 있지만이 사용자 정의보기를 사용하지 않습니다. 그것은 당신이 만지는 곳에 작은 녹색 사각형을 그려야합니다.

public class CameraOverlay extends View { 

private static final Integer rectSize = 30; 

Paint paint; 

private Rect touchRect; 

public CameraOverlay(Context context) { 
    super(context); 
    paint = new Paint(); 
    touchRect = new Rect(0,1,0,1); 
} 

protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    paint.setStyle(Paint.Style.FILL); 
    paint.setColor(Color.WHITE); 

    int height = canvas.getHeight(); 
    int width = canvas.getWidth(); 

    canvas.drawLine(width/2,0,width/2,height,paint); 
    canvas.drawLine(0,height/2,width,height/2,paint); 

    paint.setStyle(Paint.Style.STROKE); 
    paint.setColor(Color.GREEN); 
    canvas.drawRect(touchRect, paint); 
} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    Log.d(TAG, "CameraOverlay - onTouchEvent()"); 

    invalidate(); 

    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     float x = event.getX(); 
     float y = event.getY(); 

     touchRect.left = (int) (x - rectSize); 
     touchRect.top =(int) (y - rectSize); 
     touchRect.right = (int) (x + rectSize); 
     touchRect.bottom = (int) (y + rectSize); 
    } 
    return false; 
} 
} 

다음, 대신 VirtualParkView의, 당신의 프레임이 추가 -

if (mCameraOverlay == null) 
     mCameraOverlay = new CameraOverlay(this); 
    f1.addView(mCameraOverlay); 
관련 문제