Android8.1 Camera2 左滑模块,右滑设置

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,拍照及视频按钮修改
如果找不到代码,可以看下!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值