Android Can';我不知道如何使用ImageViewTouch钩住fling
我正在使用库(),但我在尝试找出fling时遇到了问题。我已经阅读了其他答案,但它们没有显示用于获取fling事件的实际代码 我已经迷上了这样的狂欢活动:Android Can';我不知道如何使用ImageViewTouch钩住fling,android,android-fragments,Android,Android Fragments,我正在使用库(),但我在尝试找出fling时遇到了问题。我已经阅读了其他答案,但它们没有显示用于获取fling事件的实际代码 我已经迷上了这样的狂欢活动: mImage.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(even
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扩展了SimpleGestureListener。然后重写onFling方法
这种方法的问题在于,它禁用了1触,因此禁用了平移功能。我相信有更好的方法来连接fling事件(因此我可以更改图像),但我不确定如何-新手:(
我要寻找的是一种与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
的内部/外部。例如,为了方便起见,请在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();
}
接下来,在第31行后面的ImageViewTouch.java
中添加一个成员:
private OnImageViewTouchFlingEventListener mFlingEventListener;
在第64行之后添加一个公共方法来初始化mFlingEventListener
:
public void setFlingEventListener( OnImageViewTouchFlingEventListener listener ) {
mFlingEventListener = listener;
}
ImageViewTouch.java
的第261行:方法onFling(…)
定义ImageView对fling事件的反应。首先,检查您是否同意当前功能。例如,您提到希望fling事件更改图像。如果查看第266行,如果当前比例为1,fling事件将不起任何作用-它只返回false
ImageView对fling的作用方式(以及在什么情况下)是您需要决定的。例如,您决定fling仅在比例为1时更改图像-否则,它将平移。然后,对第266行的以下修改应起作用:
if (getScale() == 1f) {
if (mFlingEventListener != null) {
mFlingEventListener.onFlingEvent();
return true;
}
}
在您的代码中,当您在ImageViewTouch上设置一个OnTouchListener
时,它超越了ImageViewTouch内部触摸/手势处理提供的所有触摸功能-因此没有单/双点击回调。这就是为什么您不能在ImageViewTouch.java之外实现fling事件回调的原因-当然,您可以-但是,您需要im请用其他的手势也打褶
对活动代码的更改:
需要初始化成员mFlingEventListener
:
mImage.setFlingEventListener(new ImageViewTouch.OnImageViewTouchFlingEventListener() {
@Override
public void onFlingEvent() {
Log.d(TAG, "onFlingEvent fired");
// handle change of image
}
});
这可能不是您想要的答案,但我会尝试一下。如果您没有义务使用当前使用的库,我想推荐这是我迄今为止发现的最好的可缩放图像视图解决方案。它具有以下功能: 特征
- 使用多点触摸和双击进行开箱即用的缩放
- 滚动,与平滑滚动投掷
- 在滚动父对象(如ViewPager)中使用时,效果非常理想
- 允许在显示的矩阵发生更改时通知应用程序。适用于需要基于更新用户界面的情况
当前缩放/滚动位置 - 允许在用户点击照片时通知应用程序
回答得很好。我正朝着这个方向前进,但我希望我错过了一些东西,可以在不修改ImageViewTouch代码的情况下实现我想要的功能。我认为这些更改应该放回原始库中。再次…回答得很好!!!感谢你这么彻底。你能看看我的另一个问题吗ty?@JustLearning再次感谢您的客气话。我查阅了关于您的另一个问题的相关源代码。似乎不可能将操作栏从片段更改为覆盖。看看我发布的替代解决方案是否对您有所帮助。