轉載請註明地址: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