Cameraの使用(一)

14010 ワード

本節では、Androidではデフォルトの写真アプリではなく、カメラを起動し、画面を更新してプレビューを実現する機能を主に記録します.
  AndroidManifest.xml:  
 <activity android:name=".CameraActivity" android:screenOrientation="portrait"/>

  CameraActivity.java:
public class CameraActivity extends Activity implements mBaseUiFragment.OnUiFragmentJumpToListener {

    CameraFragment fragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        //
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        //
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.camera_activity_layout);
        initFragment();
    }

    private void initFragment(){
        if (fragment == null){
            fragment = new CameraFragment();
        }
        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.add(R.id.camera_framelayout, fragment, CameraFragment.FRAGMENT_TAG);
        fragmentTransaction.commit();
    }

    @Override
    public void jumpToFragment(Class<? extends Fragment> fragmentClass, String toFragmentTag) {

    }

    @Override
    public void jumpToFragment(Class<? extends Fragment> fragmentClass, String toFragmentTag, Bundle args) {

    }

    @Override
    public void fragmentBack() {

    }
}

 
  CameraFragment.java:  
public class CameraFragment extends mBaseUiFragment{


    static public String FRAGMENT_TAG = "CameraFragment";

    private final static int REQUEST_DELETE_PHOTO = 1;

    //    
    Camera mCamera;


    //    
    private SurfaceHolder mSurfaceHolder;

    //         
    private int switchCamera = 1;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.camera_layout, null);
        initView();

        return rootView;
    }

    private void initView(){
        SurfaceView mSurfaceView = (SurfaceView) rootView.findViewById(R.id.camera_surfaceView);
        mSurfaceHolder = mSurfaceView.getHolder();
        mSurfaceHolder.addCallback(
                new SurfaceHolder.Callback() {
                    @Override
                    public void surfaceCreated(SurfaceHolder holder) {
                        // SurfaceView               ,  Camera Surface
                        try {

                            if (mCamera != null) {
                                mCamera.setPreviewDisplay(holder);
                            }

                        } catch (Exception e) {
                            // TODO: handle exception
                        }
                    }

                    @Override
                    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                        // Surface          ,       ,    
                        if (mCamera == null) {
                            return;
                        }
                        Camera.Parameters parameters = mCamera.getParameters();
                        Camera.Size s = getBestSupportedSize(parameters.getSupportedPreviewSizes(), width, height);

                        parameters.setPreviewSize(s.width, s.height);
                        
                        parameters.setPictureSize(s.width, s.height);                      
                        mCamera.setParameters(parameters);
mCamera.setDisplayOrientation(
270); try { mCamera.startPreview(); } catch (Exception e) { // TODO: handle exception mCamera.release(); mCamera = null; } } @Override public void surfaceDestroyed(SurfaceHolder holder) { // if (mCamera != null) { mCamera.stopPreview(); } } } ); } /******************************************] * * * * @param sizes * @param width * @param height * @return */ public Camera.Size getBestSupportedSize(List<Camera.Size> sizes,int width,int height) { Camera.Size bestSize = sizes.get(0); int largestArea = bestSize.width*bestSize.height; for (Camera.Size s :sizes) { int area =s.width*s.height; if (area > largestArea) { bestSize=s; largestArea = area; } } return bestSize; } @Override public void onPause() { // TODO Auto-generated method stub super.onPause(); System.out.println("onPause"); // , Camera if (mCamera!=null) { mCamera.release(); mCamera=null; } } @SuppressLint("NewApi") @Override public void onResume() { // TODO Auto-generated method stub super.onResume(); // , Camera if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { mCamera = Camera.open(switchCamera); }else { mCamera = Camera.open(); } } }





Done