【问题标题】:How to implement double tap zooming in Mupdf?如何在 Mupdf 中实现双击缩放?
【发布时间】:2013-05-03 03:52:59
【问题描述】:

我正在研究 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 中看到“双击”日志,但页面没有缩放。我在这里做错了什么?

【问题讨论】:

  • 你好,你想好怎么做了吗?

标签: android mupdf


【解决方案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

【讨论】:

  • 我在 ReaderView 类中添加了上述方法,但它不能正常工作 双击了吗?当我添加上面的代码时,它说“ReaderView 类型的 onDoubleTap(MotionEvent) 方法必须覆盖或实现超类型方法”我是否必须将上述方法添加到其他地方?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-22
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多