Android 从左向右滑动,从屏幕左侧平稳打开相机。如何做到这一点?

Android 从左向右滑动,从屏幕左侧平稳打开相机。如何做到这一点?,android,android-camera,android-gesture,Android,Android Camera,Android Gesture,我正在制作一个相机,包括从左到右的手势滑动,它会打开相机。 但是,摄像头工作不平稳,而且从屏幕右侧打开 我应该怎么做才能从左边顺利地打开它 下面是我正在使用的代码 class SwipeGestureListener extends GestureDetector.SimpleOnGestureListener implements View.OnTouchListener { Context context; GestureDetector gDetector;

我正在制作一个相机,包括从左到右的手势滑动,它会打开相机。 但是,摄像头工作不平稳,而且从屏幕右侧打开

我应该怎么做才能从左边顺利地打开它

下面是我正在使用的代码

class SwipeGestureListener extends GestureDetector.SimpleOnGestureListener implements
        View.OnTouchListener {
    Context context;
    GestureDetector gDetector;
    static final int SWIPE_MIN_DISTANCE = 120;
    static final int SWIPE_MAX_OFF_PATH = 250;
    static final int SWIPE_THRESHOLD_VELOCITY = 200;

    public SwipeGestureListener() {
        super();
    }

    public SwipeGestureListener(Context context) {
        this(context, null);
    }

    public SwipeGestureListener(Context context, GestureDetector gDetector) {

        if (gDetector == null)
            gDetector = new GestureDetector(context, this);

        this.context = context;
        this.gDetector = gDetector;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
                           float velocityY) {

        try{
            if (Math.abs(velocityX) < SWIPE_THRESHOLD_VELOCITY) {
                return false;
            }
            if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) {
                Toast.makeText(HomeActivity.this,
                        "swipe RightToLeft ", Toast.LENGTH_SHORT).show();
            } else if ((e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE&&e2.getY()-e1.getY()<100)&&e1.getX()<30) {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    askForcameraPermission();
                } else {
                    startCamera();
                }
            }
        }catch(Exception e){

        }

        return super.onFling(e1, e2, velocityX, velocityY);

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        return gDetector.onTouchEvent(event);
    }

    public GestureDetector getDetector() {
        return gDetector;
    }

}

class MyGestureDetector extends GestureDetector.SimpleOnGestureListener {
    private static final int SWIPE_MIN_DISTANCE = 20;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 10;
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {

        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false;
            // right to left swipe
            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {

            } else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    askForcameraPermission();
                } else {
                    startCamera();
                }
            }
        } catch (Exception e) {
            // nothing
        }
        return false;
    }

    @Override
    public boolean onDown(MotionEvent e) {
        return true;
    }

    @Override
    public void onShowPress(MotionEvent e) {

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        return false;
    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {

    }
}
类SwipeGestureListener扩展了GestureDetector.SimpleOnGestureListener实现
View.OnTouchListener{
语境;
手势检测器;
静态最终整数滑动距离=120;
静态最终整数滑动路径=250;
静态最终整数滑动\u阈值\u速度=200;
公共SwipeGestureListener(){
超级();
}
公共SwipeGestureListener(上下文){
这个(上下文,空);
}
公共SwipeGestureListener(上下文、手势检测器GD检测器){
if(gDetector==null)
gDetector=新的GestureDetector(上下文,this);
this.context=上下文;
this.gDetector=gDetector;
}
@凌驾
公共布尔onFling(运动事件e1、运动事件e2、浮点速度X、,
浮动速度y){
试一试{
if(数学abs(速度x)<滑动阈值\u速度){
返回false;
}
if(e1.getX()-e2.getX()>滑动最小距离){
Toast.makeText(HomeActivity.this,
“从右向左滑动”,Toast.LENGTH\u SHORT.show();
}else if((e2.getX()-e1.getX()>滑动最小距离和&e2.getY()-e1.getY()滑动最大路径)
返回false;
//从右向左滑动
if(e1.getX()-e2.getX()>滑动最小距离和&Math.abs(速度x)>滑动阈值速度){
}else if(e2.getX()-e1.getX()>swip\u MIN\u DISTANCE&&Math.abs(velocityX)>swip\u THRESHOLD\u VELOCITY){
if(android.os.Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M){
askForcameraPermission();
}否则{
startCamera();
}
}
}捕获(例外e){
//没什么
}
返回false;
}
@凌驾
公共布尔onDown(运动事件e){
返回true;
}
@凌驾
在ShowPress上公开作废(运动事件e){
}
@凌驾
公共布尔onSingleTapUp(运动事件e){
返回false;
}
@凌驾
公共布尔onScroll(MotionEvent e1、MotionEvent e2、浮点距离X、浮点距离Y){
返回false;
}
@凌驾
公开无效在线新闻(运动事件e){
}
}

我的参考是Instagram应用程序,它可以从左向右滑动打开相机。

使用带片段的viewpager。它比使用手势检测器更简单。是的,我还认为将片段与viewpager一起使用是最好的!事实上,该应用程序已经开发出来,并且已经上市。现在要改变f低!