Camera鏡頭縮放:雙指滑動、seekBar拖動

Camera鏡頭縮放主要有兩種:監聽手勢滑動放下控制鏡頭縮放、seekBar拖動進度條控制鏡頭縮放

項目地址:https://github.com/LeeVanie/CameraDemo

1、雙指滑動實現鏡頭縮放:
(備註:項目中雙指滑動鏡頭縮放單獨成類做了封裝,不過原理和下面列出代碼一樣)

 /**
     * 向外放縮標誌
     */
    private static final int ZOOM_OUT = 0;
    /**
     * 向內放縮標誌
     */
    private static final int ZOOM_IN = 1;
  
    //重寫onTouchEvent方法 獲取手勢
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //識別手勢
        gestureDetector.onTouchEvent(event);
        final int action = event.getAction();
        switch (action & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN: {
                break;
            }
            case MotionEvent.ACTION_UP: {
                break;
            }
            case MotionEvent.ACTION_POINTER_DOWN: {
                break;
            }
            case MotionEvent.ACTION_CANCEL: {
                break;
            }
        }
        return true;
    }
    //操作類
    class ScaleGestureListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
        int mScaleFactor;
        @Override
        public boolean onScale(ScaleGestureDetector detector) {
            mScaleFactor = (int) detector.getScaleFactor();
            Camera.Parameters params = camera.getParameters();
            int zoom = params.getZoom();
            if (mScaleFactor == ZOOM_IN) {
                if (zoom < params.getMaxZoom()) 
                    zoom += 1;
            } else if (mScaleFactor == ZOOM_OUT) {
                if (zoom > 0) 
                    zoom -= 1;
            }
            params.setZoom(zoom);
            camera.setParameters(params);
            return false;
        }

    }

2、seekBar進度條拖動控制鏡頭縮放

seekBar = ((SeekBar) findViewById(R.id.seekbar));

//初始化seekBar
int maxZoom = parameters.getMaxZoom();
seekBar.setProgress(0);
seekBar.setMax(maxZoom*100);

seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                Camera.Parameters parameters = camera.getParameters();
                parameters.setZoom((int) (((progress * (1.0f / (maxZoom * 100))) * maxZoom)));
                camera.setParameters(parameters);
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {
               
            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {
                
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章