Android Gallery 滑动停止监听方案

来源:互联网 发布:js 设置input的只读 编辑:程序博客网 时间:2024/05/18 06:28

资源描述:

 网上查了不少Gallery停止监听位置的方法,都是通过起线程然后睡眠来判断,我觉得这样没必要开线程,耗费资源,同意的举手。
偶然看图库源码的时候看见一段代码,packages\apps\Gallery\src\com\android\camera\ViewImage.java

1
<strong>private void scheduleDismissOnScreenControls() {
2
mHandler.removeCallbacks(mDismissOnScreenControlRunner);
3
mHandler.postDelayed(mDismissOnScreenControlRunner,2000);//延迟
4

5
}</strong>
再结合gallery的OnItemSelectedListener,就可以在滑动停止后执行一些操作:

01
class MyOnSelectLinstener implements OnItemSelectedListener {
02
@Override
03
public void onItemSelected(AdapterView<?> parent, View view,int position, long id) {
04
scheduleDismissOnScreenControls();
05
}
06
public void onNothingSelected(AdapterView<?> parent) {
07
}
08

09
}
10
private void scheduleDismissOnScreenControls() {
11
mHandler.removeCallbacks(mDismissOnScreenControlRunner);
12
mHandler.postDelayed(mDismissOnScreenControlRunner, 2000);
13
}
在Runnable中执行操作,当Gallery滑动换页的时候,mHandler先把Runnable从列队中删除,其中的操作因此不会执行,然后在列队中添加延迟的Runnable,如果在延迟的时间内没有再次翻页就执行Runnable中的操作,这里可以在gallery中进行判断,拖动的时候可以不执行Runnable中的方法,具体就不说了。
这样就可以起到滑动停止监听的作用。


Android Gallery获取滑动停止的位置


在网上看到很多人想得到Gallery滑动停止的位置,大部分是通过起线程的方式来获取,嘿嘿,看了一下源码查了API,

发现一个方法:

                    

public void setCallbackDuringFling (boolean shouldCallback)

Since:   API Level 1

Whether or not to callback on any getOnItemSelectedListener() while the items are being flinged. If false, only the final selected item will cause the callback. If true, all items between the first and the final will cause callbacks.

大概意思是,设为false,getOnItemSelectedListener()中才返回gallery的停止位置position,滑动过程中不触发getOnItemSelectedListener()事件。

getOnItemSelectedListener() 中

public void onItemSelected(final AdapterView<?> parent, final View view,
     final int position, long id) {
    
    System.out.println("itme = " + id);
   }

当滑动停止后才返回Item,打印停止位置


原创粉丝点击