Android图库 - 滚动停止后,在ImageView中替换位图

时间:2011-09-30 18:18:14

标签: android animation scroll gallery zoom

我编写了一个带有多个图像的可缩放图库。

  • 图像可以缩放。
  • 可以拖动缩放的图像。
  • 如果图像未缩放,则可以滚动图库。

布局包含LinearLayout TextView(图库名称)和Gallery本身。

图库中的项目包含一个RelativeLayout,其中包含一个FrameLayout,其中包含ImageView(我读过我需要使用FrameLayout进行缩放)和一个TextView来显示图像的缩放状态。

我使用了自定义View.OnTouchListener来实现缩放。

现在我试图替换ImageView 中的图像后,图库已停止使用高分辨率图片滚动,以便用户可以更好/更远地放大。

我使用OnItemSelectedListenersetCallbackDuringFling做错了。

如果你快速推送屏幕,即使这样也能正常工作 但是,如果您将手指放在显示屏上并将其慢慢地移到边缘,则OnItemSelectedListener会先触发 下一个项目到达中心,滚动动画停止。相反,画廊跳起来就像失去了触摸接触并立即将画廊中的下一个项目居中。当慢慢移动手指时,OnItemSelectedListener在同一项目上被多次调用(我通过保存最后一个选定项目的位置来避免此问题)。

所以(长话短说)我正在寻找Gallery的“滚动/捕捉到网格”效果的回调/监听器。我还尝试了AnimationListener,但当我在其上调用getAnimation时,图库会返回null。

我在这里绝望......任何人都可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

问题已解决:我现在正在android.support.v4.view.ViewPager使用OnPageChangeListener自定义回调:

  • onPageSelected
  • onPageScrollStateChanged
  • onPageScrolled

答案 1 :(得分:0)

我建议您稍微改变一下方法。对于您的图库,覆盖onScroll(MotionEvent, MotionEvent, float, float)onFling(MotionEvent, MotionEvent, float, float)让他们返回超级但是在MotionEvent.ACTION_DOWN || MotionEvent.ACTION_UP将移动标志设置为true ||分别是假的。

现在,在返回图像视图时,在getView(int,View,ViewGroup)方法中使用Gallery的BaseAdapter返回低分辨率ImageView,如果移动标志为真,则返回高分辨率。