我正在使用该库(https://github.com/sephiroth74/ImageViewZoom),但在尝试清除时遇到了问题。我已经阅读了其他答案,但它们没有显示用于获取事件的实际代码。
我迷上了这样的逃亡事件:
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触摸功能,因此禁用了平移功能。我确定有更好的方法挂接到事件中(这样我就可以更改图像),但是我不确定-newb :(
我正在寻找的是一种类似于ImageViewZoom提供的其他挂钩的挂钩方式。像这样:
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
内部使用以提供各种基于手势的功能(包括单钩和双钩)。它不提供fling事件的回调。因此,您将必须自己编写代码。首先定义一个新接口,例如的OnImageViewTouchFlingEventListener
内部/外部ImageViewTouch.java
。例如,在第320行的ImageViewTouch.java
以下位置定义它:
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;
mFlingEventListener
在第64行之后添加一个公共方法进行初始化:
public void setFlingEventListener( OnImageViewTouchFlingEventListener listener ) {
mFlingEventListener = listener;
}
的第261行ImageViewTouch.java
:方法onFling(.....)
定义ImageView对fling事件的反应。首先,检查您是否同意当前功能。例如,您提到要让fling事件更改图像。如果您查看第266行,如果当前比例为1,则fling事件将不执行任何操作-它仅返回false。
您需要决定ImageView如何应对(以及在什么情况下)。假设您决定只有在比例缩放时,猛击才会更改图像one
-否则它将平移。然后,对266行进行以下修改即可:
if (getScale() == 1f) {
if (mFlingEventListener != null) {
mFlingEventListener.onFlingEvent();
return true;
}
}
在您的代码中,当您OnTouchListener
在ImageViewTouch上设置时,它将取代ImageViewTouch的内部触摸/手势处理所提供的所有触摸功能-因此没有单次/双击回调。这就是为什么您不能在ImageViewTouch.java之外实现fling事件回调的原因-可以,但是,然后,您还需要实现其他所有手势。
更改您的活动代码:
该成员mFlingEventListener
需要初始化:
mImage.setFlingEventListener(new ImageViewTouch.OnImageViewTouchFlingEventListener() {
@Override
public void onFlingEvent() {
Log.d(TAG, "onFlingEvent fired");
// handle change of image
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句