PhotoViewAttacherboolean onFling(MotionEvent, MotionEvent, float, float)阻止调用我的OnSingleFlingListeneronFling方法,除非当前比例为最小。

我从OnSingleFlingListener实现了com.github.chrisbanes.photoview。但是,由于onFling方法仅在包中可见,因此首先调用PhotoViewAttacheronFling方法。 PhotoViewAttacher.onFling防止在onFling时调用我的scale > DEFAULT_MIN_SCALE方法。我需要我的电话,除非scale > getMediumScale()。 (当图像的宽度与窗口的宽度匹配时,为scale == getMediumScale()。)如何解决这个问题?我需要自己制作整个PhotoView软件包的副本,然后将OnSingleFlingListener.onFling修改为公开吗?

我的代码:

public class BasicViewActivity extends AppCompatActivity implements DownloadCallback, OnSingleFlingListener {
@Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        . . .
        return true;
    }


OnSingleFlingListener:

package com.github.chrisbanes.photoview;
public interface OnSingleFlingListener {
    boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY);
}


PhotoViewAttacher:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    if (mSingleFlingListener != null) {
        if (getScale() > DEFAULT_MIN_SCALE) {
            return false;
        }
        . . .
        return mSingleFlingListener.onFling(e1, e2, velocityX, velocityY);
    }
    return false;
}


我想在onFling时调用我的getScale() <= getMediumScale()。相反,仅当onFling时才调用我的getScale() == DEFAULT_MIN_SCALE方法。

最佳答案

我决定解决它。


我克隆了PhotoView包。
我将其源代码复制到自己的程序包中。
我更改了上述一行(并添加了一个分数以防止浮点错误):

if(getScale() > getMediumScale() + .01f) {
    return false;
}

关于java - 如何覆盖 boolean PhotoViewAttacher onFling(MotionEvent,MotionEvent,float,float)的限制?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54750496/

10-11 02:35