首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Gallery无限定时循环拖动成效

2012-07-31 
Gallery无限定时循环拖动效果业务需要,需要在Gallery中实现定时循环滚动效果,而网上的大部分资料都是循环

Gallery无限定时循环拖动效果

业务需要,需要在Gallery中实现定时循环滚动效果,而网上的大部分资料都是循环跳动,没有像屏幕拖动那种效果,经过几天的研究和资料整合,找出了解决方法。

?

首先定时循环:

? ? ???ScheduledThreadPoolExecutor timer = (ScheduledThreadPoolExecutor) Executors

.newScheduledThreadPool(1);ImageTask imageTask = new ImageTask();timer.scheduleAtFixedRate(imageTask, 0, 8, TimeUnit.SECONDS);    private class ImageTask extends TimerTask {        public void run() {
// getPos是我在imageAdapter中加入的方法,在ImageAdapter加一个成员变量position,然后在getView中将position
的值负值给成员变量,getPos()返回这个成员变量值int curPos = imageAdapter.getPos();
         Message message2 = new Message();Bundle data = new Bundle();         data.putInt("pos", curPos);         message2.what = 1;message2.setData(data);myHandler.sendMessage(message2);    }
?

?

?

然后在Handler对象中处理:

?

? ? ? imageAdapter.setCount(focusList.size());

      focusGallery.setAdapter(imageAdapter);
?

? ? ??//注意,这两个事件是我模拟处理的,其中的数字是我用用手拖动然后用在实际Gallery的onFling事件Log打印出来的。

? ? ? ?想实现定时有一个假象的拖动动作,就模拟了这两个事件。

      MotionEvent e1 = MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN, 322.25406f, 108.34271f, 0);MotionEvent e2 = MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_MOVE, 146.52338f, 122.55939f, 0);
//这里一定要使用setSelection,否则每次都会从第一张图片滚动,也就是说只要速度正常,只出现第一张和第二张图片
选择当前图片,然后在当前位置下滚动。focusGallery.setSelection(msg.getData().getInt("pos"));if(firstLoad){firstLoad = false;}else{
//-945这个值可以自己测试做相应的调整,负值表示向右滑动focusGallery.onFling(e1, e2, -945, 0);}addHeaderPointImage(focusList.size());}
?

然后在Gallery的Adapter中然getCount()返回Integer.MAX_VALUE;在getView中position参数进行如下处理

?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??int imageSize = focusList.size();

position = position % imageSize;
?

然后就可以无限循环了。

最后处理一下那个圆点。

?

?

focusGallery.setOnItemSelectedListener(new OnItemSelectedListener() {public void onItemSelected(AdapterView<?> paramAdapterView,View paramView, int paramInt, long paramLong) {int curPos = imageAdapter.getPos();paramInt = curPos % focusList.size();Log.v("liuyx", curPos+"");for (int i = 0; i < pointImageList.size(); i++) {if (paramInt == i) {pointImageList.get(i).setImageResource(R.drawable.information_focus_cirlce_current);} else {pointImageList.get(i).setImageResource(R.drawable.information_focus_cirlce);}}}public void onNothingSelected(AdapterView<?> paramAdapterView) {}});
?

?

?

?

1 楼 xiaowangzaixian 2012-05-16   有效果图吗,lz
2 楼 lyx2007825 2012-05-17   我是在原先公司的项目里改的,你可以用个Gallery试试

热点排行