java - 在同一个 Activity 中组合滑动手势和单击按钮

标签 java android button swipe

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

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
    }

}

这里是实现“滑动”和按钮的 Activity 的代码(代码已简化):

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()。您正在将监听器设置为空按钮

检查下面的代码:

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);

    }

关于java - 在同一个 Activity 中组合滑动手势和单击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49967197/

相关文章:

java - 如何使用正则表达式替换附加到java字符串的开头?

java - 如何使用 Java 测试邮件服务器是否处于 Activity 状态?

java - 当变量已经声明时,为什么我的 for 循环需要一个标识符?

java - onClick 监听器不起作用 - 无法到达断点

android - 我怎样才能在android中接受多种语言的输入

postgresql - 单击 Odoo 中的按钮后如何运行 sql 查询?

java - 在单个项目 netbeans 中有两个同名的 jar 文件

android - 无法按标题搜索Android应用-仅按包名称搜索

actionscript-3 - FlashDevelop语法错误: Expecting Identifier Before Public

javascript - 按钮上有扰流板