gpt4 book ai didi

android - 画廊内的图像缩放/平移

转载 作者:太空狗 更新时间:2023-10-29 16:24:45 27 4
gpt4 key购买 nike

我正在尝试在 android 图库小部件中缩放/平移图像。图像覆盖整个屏幕。虽然我可以缩放/平移图库中的图像,但我无法滑动到下一张/上一张图像。单个图像的缩放和平移效果很好。

我从 Hello Android 书中创建了一个 TouchImageView,它扩展了具有缩放和平移功能的 ImageView。然后我在将图像返回到图库的适配器类的 getView() 方法中返回了这个 TouchImageView。

我在 http://groups.google.com/group/android-developers/msg/97421179bfc5a3b2 的谷歌群组中发现了完全相同的问题但那边没有回复。

谢谢。

最佳答案

我通过创建一个从 Gallery 小部件类派生的新类来解决这个问题。我叫我的 ZoomableGallery。我让我的实现了一些手势监听器来处理非多点触控或 pre 2.0 设备上的缩放和双击缩放。

public class ZoomableGallery extends Gallery implements OnDoubleTapListener, OnGestureListener, OnScaleGestureListener {}

关键是不要让您的内部小部件消耗触摸事件。创建响应触摸事件并放大和缩小的 ZoomablePannableImageView 似乎是正确的想法。这似乎是个好主意,因为这个可重用的组件在 Gallery 之外也能很好地工作。但是我认为它不能很好地工作。最好的方法是创建一个不处理触摸事件或设置任何 gesturelisteners 的 ZoomableImageView,而是提供一个 api,用于设置比例因子和平移 X、Y 维度作为常规方法。

然后,一旦您完成了这条路线,您就可以让 Gallery 小部件的后代巧妙地处理所有触摸事件,只转发需要转到小部件的触摸 Action fragment 。我的意思是,如果说我们放大了图像,我们几乎看到了整个图像,除了左边屏幕外有 4 个像素。如果我们收到一个触摸事件,将图像向右滚动 8 个像素。我们的图库小部件需要向图像小部件发送一个 pan 4 pixels right 消息。然后它本身也需要消耗 4 个像素的水平运动。因此, ImageView 不仅会显示其完整的左边缘,而且会向右滑动一点,可能会显示图库适配器中的下一个 ImageView 。

在扩展 Gallery 的新类中要覆盖的关键函数是:

    @Override
public boolean onTouchEvent(MotionEvent event) {}

    @Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {}

我不想复制和粘贴我的整个实现,因为它杂乱无章且难以理解,而且在压力下它还会显示一些故障行为。但我不认为这是因为我采用的策略,而仅仅是因为我还没有清理它。

关键是要记住用户所处的模式(缩放,或在图像内部平移,平移整个画廊)

在用户在图像内部平移的情况下,我的代码看起来像在 onScroll 方法内处理 switch 语句:

        case INNERDRAG:
float unhandledPan = mCurrentPannable.panHorizontally(distanceX);

// Negative unhandled pan means that we are shifting over to the image to the right

if (unhandledPan != 0.0f) {
if (unhandledPan < 0.0f)
mMode = GALPANRIGHT;
else
mMode = GALPANLEFT;

return super.onScroll(e1,e2,0.0f-unhandledPan,distanceY);

} else {
return true;
}

在此代码中,mCurrentPannable 指的是画廊当前“选择”的 View 。 Pannable 只是一个接口(interface),它将 panHorizo​​ntally 和 panVertically 定义为做两件事的函数:尝试将内部 View 平移这么多像素,如果该平移量超出它可以平移的边缘,它返回像素数它无法处理。

然后 gallery 不会将相同的参数传递给 super.onScroll,它只会传递 pan 未使用的内容。

希望对您有所帮助。

关于android - 画廊内的图像缩放/平移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5011994/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com