繁体   English   中英

在同一活动中组合轻扫手势和单击按钮

[英]Combination of swipe gesture and click button in a same Activity

我是android Studio的初学者。 我想在一个Activity中实现:滑动捕获和使用一个按钮。 为了做到这一点,我使用了一个继承自Gesture Detector类的类:

public class SwipeGestureDetector extends GestureDetector {

    private final static int DELTA_MIN = 50 ;

    public SwipeGestureDetector (final FriendActivity context){
        super(context, new GestureDetector.SimpleOnGestureListener () {

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

                float deltaX = e2.getX()- e1.getX();

                if(Math.abs(deltaX) >= DELTA_MIN){

                    if (deltaX <0){
                        context.onSwipe(SwipeDirection.RIGHT_TO_LEFT);
                        return true ;
                    }
                    else {
                        context.onSwipe(SwipeDirection.LEFT_TO_RIGHT);
                        return true ;
                    }
                }
                return false ;
            }

        } );
    }

    public static enum SwipeDirection {
        LEFT_TO_RIGHT, RIGHT_TO_LEFT
    }

}

这里的活动代码实现了“滑动”和按钮(简化了代码):

public class FriendActivity extends AppCompatActivity {


    private Button btnDelete ;


    private SwipeGestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_friend);

        btnDelete.setOnClickListener(btnBestListener);
        gestureDetector = new SwipeGestureDetector(this);

    }

    public boolean dispatchTouchEvent(MotionEvent event) {

        return gestureDetector.onTouchEvent(event);

    }


    private View.OnClickListener btnBestListener = new View.OnClickListener(){

        @Override
        public void onClick(View v) {
            //ACTION WITH THE BUTTON
        }
    };


    public void onSwipe(SwipeGestureDetector.SwipeDirection direction) {

        switch (direction) {
            case LEFT_TO_RIGHT:
                //ACTIONS WHEN I SWIPE FROM THE LEFT TO THE RIGHT
                break;

            case RIGHT_TO_LEFT:
                //ACTIONS WHEN I SWIPE FROM THE RIGHT TO THE LEFT
                break;
        }

    }

}

滑动手势效果很好,但是单击按钮不可用。 我认为这是由于motionEvent被GestureDector“捕获”的事实所致。 我希望我的解释清楚。 你能帮我解决这个问题吗? 如果您有解决方案,可以用一种非常简单的方式进行解释,因为我是从Android Studio和Java开始的。

先感谢您 !

您错过了findViewById() 您正在将listener器设置为null button

检查以下代码:

private Button btnDelete ;


    private SwipeGestureDetector gestureDetector;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_friend);
        btnDelete = findViewById(R.id.button);
        btnDelete.setOnClickListener(btnBestListener);
        gestureDetector = new SwipeGestureDetector(this);

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM