骉怎么读:android的Gallery降低选择频率

来源:百度文库 编辑:九乡新闻网 时间:2024/05/08 19:46:44
android的ImageSwitcher是一个图片更换而产生动画过渡的控件,appdemo里面有例子,其实是一个很好的图片浏览的例子,但有一个不好的地方就是选择小图时,速度太快,每个经过中点的小图都产生一次事件,导致大图切换效果不理想。
比如点击第一张,放大第一张,点击第三张,是先放大第二张,再放大第三张,滑动时经过的所有图片都显示一次,很不理想。
我们可以用线程来处理这个问题,一定的时间后如果选择的index值不变,说明已经稳定不变,显示大图。

修改一下即可:

/*
* 原代码
*/
// public void onItemSelected(AdapterView parent, View v, int position, long id) {
// mSwitcher.setImageResource(mImageIds[position]);
// }

/*
* code: hqlulu
* http://www.aslibra.com
* 增加以下代码
*/
private int showingIndex = -1;
private static final int TIME_OUT_DISPLAY = 300;
private int toShowIndex = 0;

@Override
public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) {
Log.v("test", "onItemSelected arg2="+arg2+" arg3="+arg3);

toShowIndex = arg2;
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
if(showingIndex != toShowIndex){
showingIndex = toShowIndex;
mSwitcher.setImageResource(mImageIds[toShowIndex]);
}
}
};
Thread checkChange = new Thread() {
public void run() {
int myIndex = toShowIndex;
try {
sleep( TIME_OUT_DISPLAY );
if( myIndex == toShowIndex ){
handler.sendEmptyMessage(0);
Log.v("test", "+++ stable can show ...");
}else{
Log.v("test", "+++ not stable...");
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
checkChange.start();
}