皮皮网

【服务器监控系统源码】【abclotto源码】【stlmap源码】ontouchevent源码

2024-12-23 01:41:59 来源:闪电指标源码大全

1.android onTouchEvent和setOnTouchListener中onTouch的区别
2.Android onTouchEvent和setOnTouchListener中onTouch的区别

ontouchevent源码

android onTouchEvent和setOnTouchListener中onTouch的区别

       android中onTouchEvent和setOnTouchListener中onTouch的区别可以有些人并不了解,其实要说明白这个问题先要说下android的事件传递机制。首先看下以下的代码1,这段代码反应了View处理事件的过程:代码1:publicbooleandispatchTouchEvent(MotionEventevent){ if(mOnTouchListener!=null&&mOnTouchListener.onTouch(this,源码服务器监控系统源码event)){ returntrue;}returnonTouchEvent(event);}在代码1中有一点首先需要明确,那就是如果dispatchTouchEvent返回值为true则本次事件被系统消耗掉(就是被控件处理了),然后一个新的事件会被传入,如果dispatchTouchEvent返回值为false,则不会有新的事件被传入。好,明白了这一点再看那个代码1中if语句后面的条件mOnTouchListener!=null&&mOnTouchListener.onTouch(this,event),mOnTouchListener对象其实不就是你写的监听器对象吗?比如下面代码2的这个匿名对象。代码2:xxxView.setOnTouchListener(newOnTouchListener(){ @OverridepublicbooleanonTouch(Viewv,MotionEventevent){ returntrue;}});好,我们再看下代码2中onTouch事件中的返回值,如果代码2returntrue则代表什么呢?代表代码1中将不会执行returnonTouchEvent(event);语句,这也就是说这次系统事件会被消耗掉,将会再次执行dispatchTouchEvent这个方法。如果代码2returnfalse则代表代码1会执行onTouchEvent(event);这个方法,本次事件是否会被消耗掉将取决于onTouchEvent的返回值。做个小总结其实就是如果setOnTouchListener中的onTouch方法返回值是true则onTouchEvent方法将不会被执行;只有当setOnTouchListener中的onTouch方法返回值是false时onTouchEvent方法才被执行。以上说的情况适用于View对象而不是ViewGroup对象,ViewGroup对象下次再分析。

Android onTouchEvent和setOnTouchListener中onTouch的区别

       å¦‚果你不在意事件的传递,那实际效果是完全一样的,只是实现方式不一样。如下代码:public class TestActivity extends Activity implements View.OnTouchListener {

           @Override

           protected void onCreate(Bundle savedInstanceState) {

               super.onCreate(savedInstanceState);

               setContentView(R.layout.activity_text_view);

               Button button = findViewById(R.id.my_button);

               button.setOnTouchListener(new View.OnTouchListener() {

                   @Override

                   public boolean onTouch(View v, MotionEvent event) {

                       //……你的代码

                       return false;

                }

               });

           }

           @Override

           public boolean onTouch(View v, MotionEvent event) {

               if (v.getId() == R.id.my_button){

                   //……你的代码

               }

               return false;

           }

       }

       ä¸€ä¸ªæ˜¯é€šè¿‡setOnTouchListener方法实现的,一个是通过implements View.OnTouchListener实现的。最终都是响应R.id.my_button这个按钮的事件。