main.xml에서 레이아웃을 구성할 때
surface를 집어 넣구 싶은데 잘 못해서 이히히ㅜ ㅜ
1. 메인!!
public class MainView extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
2. sufaceView를 이용한 카메라 화면 보여주기!! 인터넷에 흔한 자료입니다.
public class CameraView extends SurfaceView implements SurfaceHolder.Callback {
SurfaceHolder mHolder;
Camera mCamera;
CameraView(Context context) {
super(context);
mHolder = getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mCamera = Camera.open();
try {
mCamera.setPreviewDisplay(holder);
}catch(IOException e) {
mCamera.release();
mCamera = null;
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewSize(width, height);
//parameters.set("orientation", "landscape");
mCamera.setParameters(parameters);
mCamera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
main.xml 레이아웃입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
<com.kjs86kr.t1008.CameraView
android:id = "@+id/m_surface_camera"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
/>
</LinearLayout>
에러가 발생해서 튕기네요.
무엇이 문제일까요 ㅜ_ㅜ
CameraView(Context context) 말고
CameraView(Context context, AttributeSet attr) 생성자가 필요합니다.
보통 뷰 상속 받은 클래스들은 그 뷰에 특화된 초기화는 init()함수로 빼고
생성자는 위의 두개와 스타일 관련 생성자까지 3개정도 구현해서
super(...);
init();
이런식으로 씁니다.
xmlns:cameraview="http://schemas.android.com/apk/res/com.kjs86kr.t1008.CameraView"
android:id = "@+id/m_surface_camera"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
/>
ㅔ임스페이스 안적어도 되나요?