2011-03-07 93 views

回答

79

本文在Android開發者博客涵蓋了這個主題非常好(向下滾動到節上GestureDetectors):

Making Sense of Multitouch

如果你只是想實現捏到變焦,有隻有幾行代碼,你將需要:

private ScaleGestureDetector mScaleDetector; 
private float mScaleFactor = 1.f; 

public MyCustomView(Context mContext){ 
    //... 
    //Your view code 
    //... 
    mScaleDetector = new ScaleGestureDetector(context, new ScaleListener()); 
} 

@Override 
public boolean onTouchEvent(MotionEvent ev) { 
    // Let the ScaleGestureDetector inspect all events. 
    mScaleDetector.onTouchEvent(ev); 
    return true; 
} 

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    canvas.save(); 
    canvas.scale(mScaleFactor, mScaleFactor); 
    //... 
    //Your onDraw() code 
    //... 
    canvas.restore(); 
} 

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener { 
    @Override 
    public boolean onScale(ScaleGestureDetector detector) { 
     mScaleFactor *= detector.getScaleFactor(); 

     // Don't let the object get too small or too large. 
     mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 5.0f)); 

     invalidate(); 
     return true; 
    } 
} 

與處理其他的手勢,但不是使用其實施本條所處理其餘部分,可以使用GestureDetector就像在上面的代碼中使用ScaleGestureDetector一樣。

+4

我這個做,但我怎麼可以拖動或滾動縮放視圖 – sillyMistaker 2015-07-26 18:01:16

+0

@sillyMistaker關於它在這篇文章的鏈接很好地解釋了鍋。評論的內容太多,但它仍然遵循相當簡單的邏輯。 – TechNyquist 2017-07-11 14:00:05

7

把你的看法放進ZoomView

定製視圖在這裏可用https://github.com/Polidea/android-zoom-view它很容易,免費,很有趣!

+4

任何文檔去配合? – Peter 2013-01-29 19:22:59

+0

很好的例子,但它導致很多無效的調用。 – DearDhruv 2013-09-12 06:05:33

+1

不幸的是,該項目在過去6個月中似乎沒有活躍。我在15天前提交了一個pull請求來修復一個明顯的bug,但是我沒有得到任何迴應。 – 2014-10-31 21:35:20

-2

使用本:

的ImageView爲Android版支持縮放,通過各種觸摸手勢的實現。

https://github.com/chrisbanes/PhotoView

+0

Photoview僅適用於ImageView,但沒有獲得由另一個類擴展的View。請如何使用CustomView。? – 2018-02-27 10:30:56