2016-11-03 3 views
0

카메라에서 사진을 찍고 싶지만 사진을 찍으려는 새로운 의도는 시작하고 싶지 않지만 카메라를 열고 싶습니다. 내 레이아웃 내부에서 다음 사진을 찍으려면 버튼을 클릭하십시오.Android : 카메라를 시작하지 않고 레이아웃에서 사진 찍기

enter image description here

그래서 그것은 또한 내가 토큰 사진이 잘립니다 것을 좋아, 내가 이것에 대해 어떤 능숙를 발견하지 않았기 때문에 그것을 할 수 있습니까?

+0

make imageView를 클릭하면 문제가 해결됩니다. –

+0

맞춤 카메라보기 : http://stackoverflow.com/questions/8543244/custom-camera-android. circle 서페이스보기 : http://stackoverflow.com/questions/31443911/creating-circle-in-surfaceview-on-button-click-android 거의 모든 것이 이미 StackOverflow에 있습니다. 그냥 그것을 검색하십시오. –

+0

당신은 원하는 모양으로 표면보기를 디자인 할 수 있도록 의상 카메라를 만들어야합니다. – Nivedh

답변

0

카메라 런타임 권한을 얻어야합니다. 그런 다음 카메라 API에 직접 액세스 할 수 있습니다.

합니다 (official documentation에서) 레이아웃 구조에서 미리보기 이미지가 표시됩니다 예를 들어이 SurfaceView :

/** A basic Camera preview class */ 
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback { 
    private SurfaceHolder mHolder; 
    private Camera mCamera; 

    public CameraPreview(Context context, Camera camera) { 
     super(context); 
     mCamera = camera; 

     // Install a SurfaceHolder.Callback so we get notified when the 
     // underlying surface is created and destroyed. 
     mHolder = getHolder(); 
     mHolder.addCallback(this); 
     // deprecated setting, but required on Android versions prior to 3.0 
     mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
    } 

    public void surfaceCreated(SurfaceHolder holder) { 
     // The Surface has been created, now tell the camera where to draw the preview. 
     try { 
      mCamera.setPreviewDisplay(holder); 
      mCamera.startPreview(); 
     } catch (IOException e) { 
      Log.d(TAG, "Error setting camera preview: " + e.getMessage()); 
     } 
    } 

    public void surfaceDestroyed(SurfaceHolder holder) { 
     // empty. Take care of releasing the Camera preview in your activity. 
    } 

    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 
     // If your preview can change or rotate, take care of those events here. 
     // Make sure to stop the preview before resizing or reformatting it. 

     if (mHolder.getSurface() == null){ 
      // preview surface does not exist 
      return; 
     } 

     // stop preview before making changes 
     try { 
      mCamera.stopPreview(); 
     } catch (Exception e){ 
      // ignore: tried to stop a non-existent preview 
     } 

     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     // start preview with new settings 
     try { 
      mCamera.setPreviewDisplay(mHolder); 
      mCamera.startPreview(); 

     } catch (Exception e){ 
      Log.d(TAG, "Error starting camera preview: " + e.getMessage()); 
     } 
    } 
} 

당신이 코드로 Camera 인스턴스를 얻을 :

/** A safe way to get an instance of the Camera object. */ 
public static Camera getCameraInstance(){ 
    Camera c = null; 
    try { 
     c = Camera.open(); // attempt to get a Camera instance 
    } 
    catch (Exception e){ 
     // Camera is not available (in use or does not exist) 
    } 
    return c; // returns null if camera is unavailable 
} 

그리고 당신이 그것을 표시를 Activity에서 다음과 같이 표시됩니다.

public class CameraActivity extends Activity { 

    private Camera mCamera; 
    private CameraPreview mPreview; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     // Create an instance of Camera 
     mCamera = getCameraInstance(); 

     // Create our Preview view and set it as the content of our activity. 
     mPreview = new CameraPreview(this, mCamera); 
     FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview); 
     preview.addView(mPreview); 
    } 
} 

official documentation을 참조하십시오.

관련 문제