2

我正在研究 Android 上的 Mupdf 库。我成功编译并运行了示例。这真的是一个很棒的图书馆。但是现在我在触发“双击”事件时缩放页面时遇到了问题。

首先,我实现了我的视图来“监听”双击事件:

public class MuPDFReaderView extends ReaderView implements GestureDetector.OnDoubleTapListener

然后,我覆盖了onDoubleTap()方法:

@Override
public boolean onDoubleTap(MotionEvent e) {
    // TODO Auto-generated method stub
    MuPDFView pageView = (MuPDFView) getDisplayedView();
    pageView.setScale(1.5f);
    Log.e("double tap", "" + e.getDownTime());
    return false;
}

在页面上双击时,我可以在 Logcat 中看到“双击”日志,但页面没有缩放。我在这里做错了什么?

4

2 回答 2

1

我不确定为什么您的尝试没有奏效,但这是另一种方法:

不要GestureDetector.OnDoubleTapListener在您的视图上实现,而是直接在ReaderView您扩展的视图上实现它

public class ReaderView extends AdapterView<Adapter> implements 
    GestureDetector.OnGestureListener,
    GestureDetector.OnDoubleTapListener,
    ScaleGestureDetector.OnScaleGestureListener,
    Runnable { ... }

然后OnDoubleTap像这样覆盖方法

@Override
public boolean onDoubleTap(MotionEvent e) {

    float previousScale = mScale;
    mScale += (mScale == 1f) ? 2f : -2f;
    float factor = mScale/previousScale;

    View v = mChildViews.get(mCurrent);
    if (v != null) {
        // Work out the focus point relative to the view top left
        int viewFocusX = (int)e.getX() - (v.getLeft() + mXScroll);
        int viewFocusY = (int)e.getY() - (v.getTop() + mYScroll);
        // Scroll to maintain the focus point
        mXScroll += viewFocusX - viewFocusX * factor;
        mYScroll += viewFocusY - viewFocusY * factor;
        requestLayout();
    }

    return true;
}

您还必须覆盖这两种其他方法

@Override
public boolean onDoubleTapEvent(MotionEvent e) {
    return false;
}

@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
    return false;
}

从 Librelio Android 示例中获取此代码

https://github.com/libreliodev/android

于 2014-10-06T20:00:38.047 回答
0

您需要通过 ReaderView 处理此问题。修改比例并启动请求布局。

于 2015-08-19T10:39:08.180 回答