2011-03-07 52 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