Как я могу переопределить ограничения логического PhotoViewAttacher onFling(MotionEvent, MotionEvent, float, float)?
PhotoViewAttacher
"s boolean onFling(MotionEvent, MotionEvent, float, float)
мешает моему OnSingleFlingListener
"s onFling
метод от вызова, если текущий масштаб не является минимальным.
Я реализовал OnSingleFlingListener
от com.github.chrisbanes.photoview
, Тем не менее, так как onFling
метод виден только в пакете, PhotoViewAttacher
"s 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
,
0 ответов
Я решил обойти это.
- Я клонировал пакет PhotoView.
- Я скопировал его источник в свой собственный пакет.
Я изменил одну строку, упомянутую выше (и добавил дробь, чтобы предотвратить ошибку с плавающей запятой):
if(getScale() > getMediumScale() + .01f) { return false; }