扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
onTouch与onClick事件在Android应用中的关系有哪些?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
创新互联公司专注于企业网络营销推广、网站重做改版、安多网站定制设计、自适应品牌网站建设、H5页面制作、商城网站建设、集团公司官网建设、外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为安多等各大城市提供网站开发制作服务。LinearLayout分别设置了onTouchListener,onClickListener,onLongClickListener及onTouchEvent回调
1、在屏幕上触摸之后基本的执行流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1 onClick
也就是先说onTouchListener是最先被触发的,然后是本身的onTouchEvent回调;当最后的up事件发生并被onTouchEvent处理后才会触发onClickListener。
2、把onTouchEvent回调中的super.onTouchEvent去除,直接返回true;则流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1
可以看到onClickListener永远无法被触发,也侧面说明了对onClick的触发是在onTouchEvent回调中来实现的。
3、长按屏幕,流程如下:
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onLongClick onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1 onClick
当长按的时候,无需到up就会触发onLongClick的响应,但之后也会继续触发onClick的响应。
4、但如果在onLongClick中返回true,则流程如下,即只在中间触发了onLongClick,之后会继续响应touch,但当up的时候就不会再触发onClick
onTouch,action=0 onTouchEvent,action=0 onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onLongClick onTouch,action=2 onTouchEvent,action=2 onTouch,action=2 onTouchEvent,action=2 onTouch,action=1 onTouchEvent,action=1
测试代码如下:
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); FrameLayout frame = (FrameLayout)findViewById(R.id.container); LinearLayoutTest line = new LinearLayoutTest(this); line.setOnClickListener(new ClickListener()); line.setOnLongClickListener(new LongClickListener()); line.setOnTouchListener(new TouchListener()); line.setLongClickable(true); frame.addView(line); } public class ClickListener implements OnClickListener { @Override public void onClick(View v) { Log.e("test","onClick"); } } public class LongClickListener implements OnLongClickListener{ @Override public boolean onLongClick(View v) { Log.e("test","onLongClick"); return true; } } public class TouchListener implements OnTouchListener{ @Override public boolean onTouch(View v, MotionEvent event) { Log.e("test","onTouch,action="+event.getAction()); return false; } } } public class LinearLayoutTest extends LinearLayout{ public LinearLayoutTest(Context context) { super(context); } @Override public boolean onTouchEvent(MotionEvent event) { Log.e("test","onTouchEvent,action="+event.getAction()); return super.onTouchEvent(event); } }
关于onTouch与onClick事件在Android应用中的关系有哪些问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流