제가 지금 증강현실을 해보고 싶어서 도전중인데... 현재 카메라preview를 띄우는 것까지는 성공했습니다.. 여기까지는 어려움이 없더군요.. 하지만 문제는 이 카메라 위에 버튼을 띄우는 것이 쉽지가 않네요..ㅠㅠ
이부분은 자료도 많지 않은거 같고.. 그리고 자료를 찾아도 정확하게 뭔말인지도 모르겠고..ㅠㅠ 그래서 java소스와 xml소스를 올립니다.. 보고 틀린부분이 있다면 알려주시고... 카메라preview위에 버튼을 띄우는 방법 좀알려주세요...정말 간절합니다...ㅠㅠ 해야 할부분을 표시해서 알려주시면 감사하겠습니다..ㅠㅠ 아직까지는 말설명을 하면 잘 못알아 들어서요..ㅠㅠ 정말 죄송합니다..ㅠㅠ 귀찮게 해드려서...ㅠㅠ
 
#### Xml소스 ####
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
  

<com.android.cameraTest
 android:id="@+id/preview"
 android:visibility="gone"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"/>
  
  
<LinearLayout
 android:id="@+id/linearLayout1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">
   
   
<Button
 android:text="Button"
 android:id="@+id/button1"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"/>
</LinearLayout>
</FrameLayout>
 
 
#### Java소스 ####
package com.android.cameraTest;
import java.io.IOException;
import android.app.Activity;
import android.content.Context;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
public class cameraTest extends Activity {
    /** Called when the activity is first created. */
 
 private Preview mPreview;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
       
       
        mPreview = new Preview(this);
        setContentView(mPreview);
    }
}
class Preview extends SurfaceView implements SurfaceHolder.Callback
{
 
 SurfaceHolder mHolder;
 Camera mCamera;
 
 public Preview(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
  // SurfaceHolder.Callback을 설정함으로써 Surface가 생성/소멸되었음을
  // 알수 있다.
  mHolder = getHolder();
  mHolder.addCallback(this);
  mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  
 }
 @Override
 public void surfaceChanged(SurfaceHolder holder, int format, int width,
   int height) {
  // TODO Auto-generated method stub
  
  
  //표시할 영역의 크기를 알았으므로 해당 크기로  Preview를 시작한다.
  Camera.Parameters parameters = mCamera.getParameters();
  parameters.setPreviewSize(width, height);
  mCamera.setParameters(parameters);
  mCamera.startPreview();
  
 }
 @Override
 public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  // Surface가 생성되었다면, 카메라의 인스턴스를  받아온 후 카메라의
  // Preview를 표시할 수 위치를 설정합니다.
  mCamera = Camera.open();
  try
  {
   mCamera.setPreviewDisplay(holder);
  }catch(IOException exception)
  {
   mCamera.release();
   mCamera = null;
  }
  
 }
 @Override
 public void surfaceDestroyed(SurfaceHolder holder) {
  // TODO Auto-generated method stub
  
  //다른 화면으로 돌아가면, Surface가 소멸된다. 따라서 카메라의 Preview도
  //중지해야 한다. 카메라는 공유할 수 있는 자원이 아니기에, 사용하지 않을
  //경우 - 엑디비티가 일시정시 상태가 된 경우 등 - 자원을 반환해야 한다.
  mCamera.stopPreview();
  mCamera = null;
  
 }
 
}