2013-05-03 62 views
2

我正在研究Android上的Mupdf库。 我编译并成功运行了Sample。 这真是一个伟大的图书馆。 但现在我遇到了在点击“双击”事件时放大页面的问题。如何在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,但该页面没有放大。我在这里错了什么?

+0

你好,你有想过如何做到这一点? – Bruno 2014-10-06 15:40:44

回答

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; 
} 

而且你将不得不重写这些2 OT她的方法

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

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

从Librelio Android的例子

https://github.com/libreliodev/android

+0

我将上面的方法添加到ReaderView类,但它不工作双击没有?当我添加上面的代码它说:“类型ReaderView的方法onDoubleTap(MotionEvent)必须覆盖或实现超类型方法”我必须将上述方法添加到别的地方吗? – asliyanage 2014-10-09 02:59:26

0

你需要通过ReaderView来处理此得到这个代码。修改比例并启动请求布局。