1.安卓手势事件简述

就目前而言,安卓手机在使用过程中,人与手机之间的交互都是通过手指进行实现的。交互行为最常见的有ACTION_DOWN、ACTION_MOVE、ACTION_UP、ACTION_CANCEL ,ACTION_OUTSIDE以及多点触摸事件等。

2.单次点击事件的探究

创建一个项目,页面上有一个button,用于单击。一个textview用于记录事件。

btnAction.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        textViewAction.setText("");
                        textViewAction.setText(textViewAction.getText()+"down");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        textViewAction.setText(textViewAction.getText()+"move");
                        break;
                    case MotionEvent.ACTION_UP:
                        textViewAction.setText(textViewAction.getText()+"up");
                        break;
                }
                return true;
            }
  btnAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textViewAction.setText(textViewAction.getText()+"click");
            }
        });

当点击button时,textview显示的结果为
在这里插入图片描述
由此可见,一次点击事件由 一次down事件,多次move事件和一次up事件构成,move事件出现的次数由用户的按压效果决定。down表示手势事件开始,up表示结束,move则代表着过程。

当然,此时代码中ontouchlishtener方法中返回的结果为ture,则表示拦截用户的该次行为,由此方法进行处理。而事件不再传递给其他的事件监听器(如clicklistenter)。
接着我们将返回结果改为false进行探究一下。

btnAction.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        textViewAction.setText("");
                        textViewAction.setText(textViewAction.getText()+"down");
                        break;
                    case MotionEvent.ACTION_MOVE:
                        textViewAction.setText(textViewAction.getText()+"move");
                        break;
                    case MotionEvent.ACTION_UP:
                        textViewAction.setText(textViewAction.getText()+"up");
                        break;
                }
                return false;
            }
        });
        btnAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                textViewAction.setText(textViewAction.getText()+"click");
            }
        });

此时运行的结果为
在这里插入图片描述

3.结论

**用户的一次点击事件,由一个action_down,多个action_move,和action_up构成。**如果touch事件中,返回了ture,则代表touch事件已处理用户的该次行为,不需要其他事件处理器进行处理,就不再将事件进行传递。如果返回了false,则代表未处理,需要将事件传递出去。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐