2013-05-03 100 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來處理此得到這個代碼。修改比例並啓動請求佈局。