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();
}


完整代码见附件


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
Tags:
发表评论
表情
emotemotemotemotemotemotemotemotemotemotemotemotemot
emotemotemotemotemotemotemotemotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐