转载请注明地址:
网上查了不少Gallery停止监听位置的方法,都是通过起线程然后睡眠来判断,我觉得这样没必要开线程,耗费资源,同意的举手。
偶然看图库源码的时候看见一段代码,packages\apps\Gallery\src\com\android\camera\ViewImage.java
private void scheduleDismissOnScreenControls() { mHandler.removeCallbacks(mDismissOnScreenControlRunner); mHandler.postDelayed(mDismissOnScreenControlRunner,2000);//延迟}
再结合gallery的OnItemSelectedListener,就可以在滑动停止后执行一些操作:
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中的方法,具体就不说了。
Gallery不停滑动的时候,Handler列队中有Runnable的话,就会从列队中删除,Gallery停止后的相关操作放在Runnable中执行,因为删除Runnable之后又在列队中添加了同一个Runnable,设置了延迟,比如两秒,这时候再次滑动Gallery会重复执行删除了添加Runnable,如果添加延迟的Runnable之后没有滑动,两秒后就会执行Runnable中的相关操作,达到滑动停止监听的效果。