Android8.1 Camera2 左滑模块,右滑设置
1、修改手势滑动管理类GestureManager
host/src/com/mediatek/camera/gesture/GestureManager.java
......
/*<20180709 OR by xza 0000091 begin>*/
private final CameraAppUI mAppUI;
private static final int MINI_SCROLL_LENGTH = 100;
private Context mContext;
/*<20180709 OR by xza 0000091 end>*/
public GestureManager(Context context,CameraAppUI appUI) {
/*<20180709 OR by xza 0000091 begin>*/
mAppUI=appUI;
mContext=context;
/*<20180709 OR by xza 0000091 end>*/
mGestureRecognizer = new GestureRecognizer(context, new GestureListenerImpl());
mGestureNotifier = new GestureNotifier();
}
private class GestureNotifier implements OnGestureListener {
/*<20180709 OR by xza 0000091 begin>*/
private float mTransitionX;
private float mTransitionY;
/*<20180709 OR by xza 0000091 end>*/
@Override
public boolean onDown(MotionEvent event) {
.......
/*<20180709 OR by xza 0000091 begin>*/
mTransitionX = 0;
mTransitionY = 0;
/*<20180709 OR by xza 0000091 end>*/
return false;
}
@Override
public boolean onUp(MotionEvent event) {
......
/*<20180709 OR by xza 0000091 begin>*/
mTransitionX = 0;
mTransitionY = 0;
/*<20180709 OR by xza 0000091 end>*/
return false;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float dx, float dy) {
......
/*<20180709 OR by xza 0000091 begin>*/
mTransitionX += dx;
mTransitionY += dy;
Configuration config = mContext.getResources().getConfiguration();
if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
if (Math.abs(mTransitionX) > MINI_SCROLL_LENGTH
&& Math.abs(mTransitionY) < Math.abs(mTransitionX)) {
if (mTransitionX > 0&&mAppUI.getShutterTypeButtonVisibility()==View.VISIBLE){
mAppUI.showSetting();
}else if (mTransitionX < 0&&mAppUI.getShutterTypeButtonVisibility()==View.VISIBLE){
mAppUI.showModePickerFragment();
}
}
}else if (config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
if (Math.abs(mTransitionY) > MINI_SCROLL_LENGTH
&& Math.abs(mTransitionX) < Math.abs(mTransitionY)) {
if (mTransitionY < 0){
} else if (mTransitionY > 0){
}
}
}
/*<20180709 OR by xza 0000091 end>*/
return false;
}
}
.......
二、在CameraAppUI
host/src/com/mediatek/camera/ui/CameraAppUI.java
......
public void onCreate() {
/*<20180709 OR by xza 0000091 begin>*/
mGestureManager = new GestureManager( mApp.getActivity(),this);
/*<20180709 OR by xza 0000091 end>*/
}
/*<20180709 OR by xza 0000091 begin modify pravite to public>*/
public void showSetting() {
FragmentTransaction transaction = mApp.getActivity().getFragmentManager()
.beginTransaction();
/*<20180709 OR by xza 0000091 begin>*/
if (mApp.getActivity().getFragmentManager().getBackStackEntryCount() > 0) {
mApp.getActivity().getFragmentManager().popBackStack();
}
/*<20180709 OR by xza 0000091 begin>*/
transaction.addToBackStack("setting_fragment");
/*<20180709 OR by xza 0000091 begin>*/
transaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_right);
/*<20180709 OR by xza 0000091 end>*/
transaction.replace(R.id.setting_container, mSettingFragment, "Setting")
.commitAllowingStateLoss();
}
/*<20180709 OR by xza 0000091 begin modify pravite to public>*/
private void hideSetting() {
......
}
/*<20180709 OR by xza 0000091 begin>*/
public void showModePickerFragment(){
mModePickerManager.showModePickerFragment();
}
/*<20180709 OR by xza 0000091 end>*/
/*<20180709 OR by xza 0000091 begin>*/
public void hideModePickerFragment(){
mModePickerManager.hideModePickerFragment();
}
/*<20180709 OR by xza 0000091 end>*/
......
三、添加Fragment in、out动画
左进:host/res/anim/slide_in_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0.0"
android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="300"/>
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="-360dp"
android:valueTo="0dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="300"/>
</set>
左出:host/res/anim/slide_out_left.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="1000"/>
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0"
android:valueTo="-360dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="1000"/>
</set>
右进:host/res/anim/slide_in_right.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0.0"
android:valueTo="1.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="300"/>
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="360dp"
android:valueTo="0"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="300"/>
</set>
右出:host/res/anim/slide_out_right.xml
<?xml version="1.0" encoding="utf-8"?>
<!--20180709 OR by xza 0000091 add-->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="1.0"
android:valueTo="0.0"
android:valueType="floatType"
android:propertyName="alpha"
android:duration="1000"/>
<objectAnimator android:interpolator="@android:interpolator/accelerate_cubic"
android:valueFrom="0dp"
android:valueTo="360dp"
android:valueType="floatType"
android:propertyName="translationX"
android:duration="1000"/>
</set>
四、修改ModePickerManager
host/src/com/mediatek/camera/ui/modepicker/ModePickerManager.java
.......
private void updateModePickerView(IAppUi.ModeItem item) {
......
if (!(MediaStore.ACTION_IMAGE_CAPTURE.equals(action){
mModePickerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
/*<20180709 OR by xza 0000091 begin>*/
showModePickerFragment();
/*<20180709 OR by xza 0000091 end>*/
}
});
}
}
/*<20180709 OR by xza 0000091 begin>*/
public void showModePickerFragment(){
if (mFragment != null) {
return;
}
FragmentManager manager = mApp.getActivity().getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
mFragment = new ModePickerFragment();
mFragment.setStateListener(new FragmentStateListener());
mFragment.setModeSelectedListener(new OnModeSelectedListenerImpl());
mFragment.setSettingIconVisible(mIsSettingIconVisible);
if (mIsSettingIconVisible) {
mFragment.setSettingClickedListener(mSettingClickedListener);
}
mFragment.updateCurrentModeName(mCurrentModeName);
mFragment.refreshModeList(createModePickerList(mCurrentCameraId));
transaction.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_left);
transaction.replace(R.id.activity_root, mFragment, mModeFragmentText);
transaction.addToBackStack(mModeFragmentText);
transaction.commitAllowingStateLoss();
}
/*<20180709 OR by xza 0000091 end>*/
/*<20180709 OR by xza 0000091 begin modify pravite to public>*/
public void hideModePickerFragment() {
.......
}
五、修改ShutterButtonManager
host/src/com/mediatek/camera/ui/shutter/ShutterButtonManager.java
protected View getView() {
.......
/*<20180709 OR by xza 0000091 begin>*/
// mApp.getAppUi().registerGestureListener(mShutterLayout.getGestureListener(),
// SHUTTER_GESTURE_PRIORITY);
/*<20180709 OR by xza 0000091 end>*/
return mShutterLayout;
}
本文部分修改需要建立在
Android8.1 Camera2修改ShutterButton,拍照及视频按钮修改
如果找不到代码,可以看下!!!