- 在vendor/mediatek/proprietary/packages/apps/Camera/src/com/android/camera/GestureDispatcher.java中定义一个实现上滑下滑动作的监听接口
public interface GestureScrollListener{ public boolean onDown(float x,float y, int width, int height); public boolean onScroll(float dx,float dy,float totalX,float totalY); public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY); public boolean onUp(); public boolean onScale(float focusX,float focusY,float scale); public boolean onScaleBegin(float focusX,float focusY); }
- 并在该类中实例化一个GestureScrollListener接口,同时定义一个设置手势滑动的监听器方法
private GestureScrollListener mGestureScrollListener; public void setGestureScrollListener(GestureScrollListener listener){ mGestureScrollListener=listener; }
- 在该类重写的方法onScroll中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onScroll(dx,dy,totalX,totalY)){ return false; }
- 在该类重写的方法onFling中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onFling(e1,e2,velocityX,velocityY)){ return false; }
- 在该类重写的方法onScaleBegin中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onScaleBegin(focusX,focusY)){ return false; }
- 在该类重写的方法onScale中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onScale(focusX,focusY,scale)){ return false; }
- 在该类重写的方法onDown中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onDown(vertex[0],vertex[1],(int)vertex[2],(int)vertex[3])){ return; }
- 在该类重写的方法onUp中添加
if(mGestureScrollListener!=null&&mGestureScrollListener.onUp()){ return; }
- 在vendor/mediatek/proprietary/packages/apps/Camera/src/com/android/camera/manager/PickerManager.java中定义一个继承了GestureScrollListener的类MyGestureScrollListener,添加内容如下:
public class MyGestureScrollListener implements GestureScrollListener{ private boolean isScroll=false; private boolean isScaled=false; private float mTotalX=0; private float mTotalY=0; private long beginTouchTime=0; private long endTouchTime=0; private void CameraActivity mCameraActivity; public void setCameraActivity(CameraActivity mCameraActivity){ this.mCameraActivity=mCameraActivity; } @Override public bollean onScroll(float dx,float dy,float totalX,float totalY){ Log.i(TAG,"onScroll("+dx+","+dy+","+totalX+","+totalY+")"); if(!isScroll){ isScroll=true; } mTotalX=totalX; mTotalY=totalY; return false; } @Override public boolean onFling(MotionEvent e1,MotionEvent e2,float velocityX,float velocityY){ Log.i(TAG,"[onFling] ("+velocityX+", "+velocityY+")"); Log.d(TAG,"isScroll="+Boolean.toString(isScroll)); Log.d(TAG,"isScaled="+Boolean.toString(isScaled)); Log.d(TAG,"mCameraActivity.getCurrentMode()="+mCameraActivity.getCurrentMode()); if(!isScaled && isScroll && (mCameraActivity.getCurrentMode()!=ModePicker.MODE_VIDEO)){ endTouchTime=System.currentTimeMillis(); float time=Long.valueOf(endTouchTime-beginTouchTime).floatValue(); Log.d(TAG,"time ="+time+" mTotalX"+mTotalX+" mTotalY"+mTotalY+" beginTouchTime="+beginTouchTime); if((Math.ads(mTotalY)>Math.abs(mTotalX))&&(Math.abs(mTotalY)>50)&&((Math.abs(mTotalY)/time)>((float)500/1000))){ Log.d(TAG,"Check over"); if(mCameraPicker!=null){ mCameraPicker.onClick(null); } else{ Log.d(TAG,"mCameraPicker=null"); } } return false; } @Override public boolean onScaleBegin(float focusX,float focusY){ Log.i(TAG,"onScaleBegin("+focusX+","+focusY+")"); isScaled=true; return false; } @Override public boolean onScale(float focusX,float focusY,float scale){ Log.i(TAG,"onScale("+focusX+", "+focusY+", "+scale); return false; } @Override public boolean onDown(float x,float y,int width,int height){ beginTouchTime=System.currentTimeMillis(); Log.i(TAG,"onDown()"); return false; } @Override public boolean onUp(){ Log.i(TAG,"onUp"); beginTouchTime=0; endTouchTime=0; isScaled=false; isScroll=false; return false; } }
- 在vendor/mediatek/proprietary/packages/apps/Camera/src/com/android/camera/CameraActivity.java中添加GestureScrollListener对象和设置手势滑动监听器的方法
private GestureScrollListener mGestureScrollListener; public void setGestureScrollListener(GestureScrollListener listener){ mGestureScrollListener=listener; }
- 调用GestureDispatcher的设置监听器的方法
mGestureDispatcher.setGestureScrollListener(mGestureScrollListener);
- 在vendor/mediatek/proprietary/packages/apps/Camera/src/com/android/camera/bridge/CameraAppUiImpl.java中定义一个MyGestureScrollListener对象,并将活动传入该监听器对象,同时给活动传入该监听器
MyGestureScrollListener mGestureScrollListener=mPickerManage.new MyGestureScrollLisener(); mGestureScrollListener.setCameraActivity(mCameraActivity); mCameraActivity.setGestureScrollListener(mGestureScrollListener);
实现通过上滑或者下滑来切换前后摄像头的功能
最新推荐文章于 2025-05-21 11:09:09 发布