Как я могу переопределить ограничения логического PhotoViewAttacher onFling (MotionEvent, MotionEvent, float, float)? - PullRequest
0 голосов
/ 18 февраля 2019

PhotoViewAttacher boolean onFling(MotionEvent, MotionEvent, float, float) предотвращает вызов метода onFling моего OnSingleFlingListener, если текущая шкала не является минимальной.

Я реализовал OnSingleFlingListener из com.github.chrisbanes.photoview.Однако, поскольку метод onFling виден только пакету, сначала вызывается метод PhotoViewAttacher onFling.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.

1 Ответ

0 голосов
/ 26 марта 2019

Я решил обойти это.

  1. Я клонировал пакет PhotoView.
  2. Я скопировал его источник в свой собственный пакет.
  3. Я изменил одну строку, упомянутую выше (и добавилдробь для предотвращения ошибки с плавающей запятой):

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