gpt4 book ai didi

android - 无法弄清楚如何使用 ImageViewTouch Hook

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:05:15 25 4
gpt4 key购买 nike

我正在使用该库 ( https://github.com/sephiroth74/ImageViewZoom ),但我在尝试找出 fling 时遇到了问题。我已经阅读了其他答案,但它们没有显示用于获取 fling 事件的实际代码。

我迷上了像这样的 throw 事件:

 mImage.setOnTouchListener(new OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event) {
return gestureDetector.onTouchEvent(event);
}
});
gestureDetector = new GestureDetector(this, new MyGestureDetector(getApplicationContext(), this));

MyGestureDetector 扩展了 SimpleOnGestureListener。然后我重写 onFling 方法。

此方法的问题在于它禁用了 1 次触摸,因此禁用了平移功能。我确定有更好的方法来 Hook fli​​ng 事件(这样我就可以更改图像)但我不确定 -newb :(

我正在寻找的是一种与 ImageViewZoom 提供的其他 Hook 类似的 Hook 方法。像这样:

         mImage = (ImageViewTouch) view.findViewById(R.id.image);
mImage.setOnClickListener(this);

// set the default image display type
mImage.setDisplayType( ImageViewTouchBase.DisplayType.FIT_TO_SCREEN );

mImage.setSingleTapListener( new ImageViewTouch.OnImageViewTouchSingleTapListener()
{
@Override
public void onSingleTapConfirmed()
{
Log.d(TAG, "onSingleTapConfirmed");
setToolbarsVisible(!isToolbarsVisible());
}
});

最佳答案

注意:我还没有自己测试/编码,所以它可能无法开箱即用。

我检查了 ImageViewTouch 的源代码 - 它在内部使用 SimpleOnGestureListener 来提供各种基于手势的功能(包括单击和双击 Hook )。它为fling 事件提供回调。因此,您必须自己编写代码。首先定义一个新接口(interface),例如 ImageViewTouch.java 内部/外部的 OnImageViewTouchFlingEventListener。例如 - 在 ImageViewTouch.java 的第 320 行之后定义它:

public interface OnImageViewTouchFlingEventListener {

// Can be defined as `void onFlingEvent(boolean left)` ==> if left==true, user
// flinged `left-to-right`, else `right-to-left`. Similarly, you can
// modify the parameters to add checks for up-to-down and down-to-up.
void onFingEvent();
}

接下来,在ImageViewTouch.java第31行之后添加一个成员:

private OnImageViewTouchFlingEventListener mFlingEventListener;

在第64行之后添加一个公共(public)方法来初始化mFlingEventListener:

public void setFlingEventListener( OnImageViewTouchFlingEventListener listener ) {
mFlingEventListener = listener;
}

ImageViewTouch.java 的第 261 行:onFling(.....) 方法定义了 ImageView 如何响应 fling 事件。首先,检查您是否同意当前的功能。例如,您提到您希望 fling 事件更改图像。如果您查看第 266 行,如果当前比例为 1,fling 事件将不执行任何操作 - 它只是返回 false。

ImageView 的行为方式(以及在什么情况下)是您需要决定的事情。比如说,您决定仅当比例为 one 时,fling 才会更改图像 - 否则,它将平移。然后对第 266 行的以下修改应该起作用:

if (getScale() == 1f) {
if (mFlingEventListener != null) {
mFlingEventListener.onFlingEvent();
return true;
}
}

在您的代码中,当您在 ImageViewTouch 上设置 OnTouchListener 时,它会取代 ImageViewTouch 的内部触摸/手势处理提供的所有触摸功能 - 因此没有单击/双击回调。这就是为什么您不能在 ImageViewTouch.java 之外实现 Fling 事件回调的原因 - 好吧,您可以 - 但随后,您还需要实现所有其他手势

对您的 Activity 代码的更改:

需要初始化成员mFlingEventListener:

mImage.setFlingEventListener(new ImageViewTouch.OnImageViewTouchFlingEventListener() {
@Override
public void onFlingEvent() {
Log.d(TAG, "onFlingEvent fired");
// handle change of image
}
});

关于android - 无法弄清楚如何使用 ImageViewTouch Hook ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24945618/

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