마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

카메라에 구도를 맞출수 있는 그리드를 그리는데 문제가 있습니다.

0 추천

안녕하세요 고수님들

 

카메라에 구도를 맞추는 삼등분선을 그리려고 하고있습니다.

 

framelayout으로 서피스뷰 두개를 겹쳐서 아래쪽은 카메라 프리뷰로 지정하고

 

위쪽에 삼등분선을 그리는 방식으로 구현하려고 하고 있습니다.

 

그런데 이 녀석을 핸드폰에 돌려보니(갤럭시 넥서스) 처음 실행에는 삼등분선이 안그려지는데

 

멀티태스킹 전환을 이용해서 다시 어플로 돌아오면 삼등분선이 그려져 있습니다ㅜㅜ

 

처음 실행했을때도 바로 삼등분선이 그려졌으면 하는데 너무 답답합니다 ㅜㅜ

 

여기가 삼등분선이 그려지는 서피스뷰입니다 주석처리된 스레드 부분은 스레드로 그리려고 한거였는데 이건 아예 에러 납니다 ㅜㅜ

public class GridView extends SurfaceView implements Callback {

	Context mContext;
	SurfaceHolder mHolder;
	int mWidth =0;
	int mHeight =0;

	DrawThread mThread;
	
	public GridView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		init(context);
	}

	private void init(Context context) {
		// TODO Auto-generated method stub
		mContext = context;
		mHolder = getHolder();
		mHolder.addCallback(this);
		mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		
	}

	public GridView(Context context, AttributeSet attrs, int defStyle) {
		super(context);
		// TODO Auto-generated constructor stub
		init(context);
	}
	
	public GridView(Context context, AttributeSet attrs) {
		super(context);
		// TODO Auto-generated constructor stub
		init(context);
	}
	
	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		// TODO Auto-generated method stub
		mWidth = width;
		mHeight = height;
		
//		mThread.SizeChange(width, height);
//		Log.e("smiplecamerawannabe","draw method started by surfaceChanged");
		draw();
	}

	public void surfaceCreated(SurfaceHolder arg0) {
		// TODO Auto-generated method stub
		mHolder.setFormat(PixelFormat.TRANSPARENT);
		
//		mThread = new DrawThread(mHolder);
//		mThread.start();
//		Log.e("smiplecamerawannabe","draw method started by surfaceCreated");
//		draw();
	}

	public void surfaceDestroyed(SurfaceHolder arg0) {
		// TODO Auto-generated method stub
//		try {
//			mThread.join();
//		} catch (InterruptedException e) {
//			// TODO Auto-generated catch block
////			e.printStackTrace();
//		}
	}
	
	public void draw() {
		Canvas canvas;
		Paint pnt = new Paint();
		
		pnt.setColor(Color.GRAY);
		pnt.setStrokeWidth(1);
		
		canvas = mHolder.lockCanvas();
		
			mWidth = canvas.getWidth();
			mHeight = canvas.getHeight();
			Log.e("smiplecamerawannabe","height is " + mHeight);
		
			canvas.drawLine(mWidth/3, 0.0f, mWidth/3, mHeight, pnt);
			canvas.drawLine(mWidth*2/3, 0.0f, mWidth*2/3, mHeight, pnt);
			canvas.drawLine(0.0f, mHeight/3, mWidth, mHeight/3, pnt);
			canvas.drawLine(0.0f, mHeight*2/3, mWidth, mHeight*2/3, pnt);
			
//			canvas.drawRect(new Rect(0,0,200,200), pnt);
			
		mHolder.unlockCanvasAndPost(canvas);

	}
	
	
}
구마적머리 (120 포인트) 님이 2013년 8월 29일 질문
길이제한때문에 레이아웃 xml이 안넣어지네요 댓글로 마저 붙입니다

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="118dip"
        android:layout_height="match_parent"
        android:background="#404040"
        >
        <Button
            android:id="@+id/shutter"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/sampleFIRE"
            android:textSize="12pt"
            android:paddingTop="8pt"
            android:paddingBottom="10pt" />
        
        
    </LinearLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <simplecamerawannabe.MyCameraSurface
            android:id="@+id/preview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <simplecamerawannabe.GridView
            android:id="@+id/gridview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            />
    </FrameLayout>
</LinearLayout>

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...