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

SurfaceView class에 mainactivity 올리는 방법

0 추천
<span style="font-size:10px;">public class CameraPreview extends Activity {
    //private Preview mPreview;
    private ViewGroup.LayoutParams v;// = (ViewGroup.LayoutParams)i;

    @Override
	protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LogD("\nClass[CameraPreview] onCreate");
        // Hide the window title.
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.main);

        Preview previewLayout = new Preview(this);
        FrameLayout surLayout= (FrameLayout)findViewById(R.id.SurLayout);
        surLayout.addView(previewLayout);
        //    addContentView(mPreview, v.height);
    }
}
</span>

위는 java 파일 입니다.

package com.androidhuman.example.CameraPreview;

import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.ViewGroup;

import java.io.IOException;
import java.util.List;

/**
 * Created by Psj on 15. 7. 20..
 */

class Preview extends SurfaceView implements SurfaceHolder.Callback {
    private SurfaceHolder mHolder;
    private Camera mCamera;
    private Camera.Size mCameraSize;
    private Camera.Parameters params;// = mCamera.getParameters();
    private List<Camera.Size> list;// = params.getSupportedPreviewSizes();
    private CameraSellSize cameraSellSize;
    private int mDisplayWidth = 0;
    private int mDisplayHeigth = 0;
    //private String DebugString = null;

//    public class controlWindowOnCreate extends Activity {
//        @Override
//        protected void onCreate(Bundle savedInstanceState) {
//            super.onCreate(savedInstanceState);
//            setContentView(R.layout.main);
//        }
//    }

    // #1
    Preview(Context context) {
        super(context);

        //this.setId(R.id.surfaceactivity);

//        controlWindowOnCreate onActivityCreate = new controlWindowOnCreate();
//        onActivityCreate.onCreate(null);

        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        LogD("\nClass[Preview] Preview");
    }
    // #3
    public void surfaceCreated(SurfaceHolder holder) {
        LogD("\nClass[Preview] surfaceCreated");

        mCamera = Camera.open();
        try {
            mCamera.setPreviewDisplay(holder);
        } catch (IOException exception) {
            mCamera.release();
            mCamera = null;
        }
    }

    // #4
    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
        LogD("\nClass[Preview] surfaceChanged"
                + "\nwidthMeasureSpec = " + w + " heightMeasureSpec = " + h);

        Camera.Parameters parameters = mCamera.getParameters();
        parameters.setPreviewSize(w, h);
        mCamera.setParameters(parameters);
        mCamera.startPreview();
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        LogD("\nClass[Preview] surfaceDestroyed");

        mCamera.stopPreview();
        mCamera = null;
    }

    public void toSurfaceChange(int w, int h){
        LogD("\nClass[Preview] toSurfaceChange");

        this.surfaceChanged(mHolder, 0, w, h);
    }

    public void LogD(String string){
        String DebugString = null;
        DebugString += string;
        Log.d("tag", DebugString);
    }
}

위는 custom 한 SurfaceView 입니다.

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

    <FrameLayout xmlns:android = "http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/SurLayout"/>

    <Button
        style="?android:attr/buttonStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_gravity="center" />

</FrameLayout>

위는 main.xml 입니다.

 

이렇게 했을때 프로그램이 실행중 종료되어 버립니다.

커스텀된 뷰에 버튼이 올라가 있는 xml 을 올리고자 합니다.

xml에는 플로텡버튼을 추가하려고 해서 만들어 보고 있습니다.

일주일도 넘게 삽질 중 입니다.

선배님들의 조언 부탁 드립니다.

빛의선물 (180 포인트) 님이 2015년 7월 25일 질문
빛의선물님이 2015년 7월 25일 태그 변경

1개의 답변

0 추천
코드상은 특별한 문제는 안보이네요..

카메라 Permission은 제대로 넣으신건가요?

만약 넣으신 것이라면, 죽었을때의 로그를 올려주세요...
익명사용자 님이 2015년 7월 27일 답변
...