Android 放大镜代码

最近在写一个工具类,就是有好几个手机自带应用,算是对一些手机多媒体什么的总结。
这里放一个放大镜模板,就是相机+50的放大倍数,用Seekbar来调整放大倍数。

有几个比较重要的参数:
mCamera.setDisplayOrientation(mCameraId == BACK_CAMERA ? ROTATION :ROTATION): 打开后置摄像头并设置旋转角度

parameters.setPictureFormat(PixelFormat.JPEG) :设置像素模式为jpeg模式
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE):持续的对焦(手机要有对焦模式)
parameters.set(“orientation”,”portrait”):设置相机水平模式为竖直parameters.setPreviewSize(PERVIEW_WIDTH,PREVIEW_HEIGHT):赋予提前设置好的宽高
parameters.setRotation(mCameraId == BACK_CAMERA ? ROTATION : REVERT + ROTATION):设置后置摄像头的旋转度
下面是模板

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.PixelFormat;
import android.hardware.Camera;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.WindowManager;
import android.widget.SeekBar;

import com.rikka.toolbox.R;

import java.io.IOException;

public class CameraActivity extends Activity implements SurfaceHolder.Callback{
    private SurfaceView mSurfaceView;
    private int value = 50;
    private Camera.Parameters parameters;
    private Camera mCamera;
    private SurfaceHolder holder;
    private boolean mFlag = true;
    private int mCameraId= 0 ;
    private static final int BACK_CAMERA = 0; //判断相机ID
    private static final int ROTATION = 90;
    private static final int REVERT = 180;
    private static final int PERVIEW_WIDTH = 320;
    private static final int PREVIEW_HEIGHT = 240;
    private int mZoomMax;

    private SeekBar mSeekBar;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_camer);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        mSurfaceView = findViewById(R.id.surfaceView);

        holder = mSurfaceView.getHolder();       //获得句柄
        holder.addCallback(this);                //添加回调
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //兼容旧的API

        mSeekBar = findViewById(R.id.seekbar);

        mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                value = progress + 50;
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
                //TODO Auto-generator method stub
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                parameters.setZoom(value);
                mCamera.setParameters(parameters);
                mCamera.startPreview();
            }
        });
    }

    @Override
    protected void onPause() {
        super.onPause();
        try{
            if(mCamera != null){
                mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
            }
        }catch (Exception e){
            e.printStackTrace();
        }
    }

    private void startCamera(){
        if(mFlag){
            if(mCamera != null){
                mCamera.stopPreview();
                mCamera.release();
                mCamera = null;
            }
        }
        try{
            mCamera = Camera.open(mCameraId);
        }catch (Exception e){
            e.printStackTrace();
        }

        if(mCamera != null){
            mCamera.setDisplayOrientation(mCameraId == BACK_CAMERA ? ROTATION :ROTATION);
            parameters = mCamera.getParameters();
            parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
            parameters.setPictureFormat(PixelFormat.JPEG);
            parameters.set("orientation","portrait");
            parameters.setPreviewSize(PERVIEW_WIDTH,PREVIEW_HEIGHT);
            parameters.setRotation(mCameraId == BACK_CAMERA ? ROTATION : REVERT + ROTATION);
            mZoomMax = value;
            parameters.setZoom(mZoomMax);
            mCamera.setParameters(parameters);
            try{
                mCamera.setPreviewDisplay(holder);
                mCamera.startPreview();
                mFlag = true;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {

    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
       startCamera();
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {

    }

    public void onBack(View v){
        this.finish();
    }


}

猜你喜欢

转载自blog.csdn.net/rikkatheworld/article/details/80063567