转载请注明地址:http://my.oschina.net/zhanyu/blog/70724java
网上查了很多Gallery中止监听位置的方法,都是经过起线程而后睡眠来判断,我以为这样不必开线程,耗费资源,赞成的举手。android
偶然看图库源码的时候看见一段代码,packages\apps\Gallery\src\com\android\camera\ViewImage.javaapp
private void scheduleDismissOnScreenControls() { mHandler.removeCallbacks(mDismissOnScreenControlRunner); mHandler.postDelayed(mDismissOnScreenControlRunner,2000);//延迟 }
再结合gallery的OnItemSelectedListener,就能够在滑动中止后执行一些操做:ide
class MyOnSelectLinstener implements OnItemSelectedListener { @Override public void onItemSelected(AdapterView<?> parent, View view,int position, long id) { scheduleDismissOnScreenControls(); } public void onNothingSelected(AdapterView<?> parent) { } } private void scheduleDismissOnScreenControls() { mHandler.removeCallbacks(mDismissOnScreenControlRunner); mHandler.postDelayed(mDismissOnScreenControlRunner, 2000); }
在Runnable中执行操做,当Gallery滑动换页的时候,mHandler先把Runnable从列队中删除,其中的操做所以不会执行,而后在列队中添加延迟的Runnable,若是在延迟的时间内没有再次翻页就执行Runnable中的操做,这里能够在gallery中进行判断,拖动的时候能够不执行Runnable中的方法,具体就不说了。post
Gallery不停滑动的时候,Handler列队中有Runnable的话,就会从列队中删除,Gallery中止后的相关操做放在Runnable中执行,由于删除Runnable以后又在列队中添加了同一个Runnable,设置了延迟,好比两秒,这时候再次滑动Gallery会重复执行删除了添加Runnable,若是添加延迟的Runnable以后没有滑动,两秒后就会执行Runnable中的相关操做,达到滑动中止监听的效果。.net