android捏缩放

我的布局包含button,文字浏览等。是否可以实现捏放大我的布局?

看看下面的链接可能会帮助你

下面的链接提供了最好的例子,您可以重构以满足您的要求。

  1. 实施最捏变焦gestur

  2. Android的捏

  3. GestureDetector.SimpleOnGestureListener

对于android 2.2+(api level8),可以使用ScaleGestureDetector。

你需要一个成员:

private ScaleGestureDetector mScaleDetector; 

在你的构造函数(或onCreate())中添加:

 mScaleDetector = new ScaleGestureDetector(context, new OnScaleGestureListener() { @Override public void onScaleEnd(ScaleGestureDetector detector) { } @Override public boolean onScaleBegin(ScaleGestureDetector detector) { return true; } @Override public boolean onScale(ScaleGestureDetector detector) { Log.d(LOG_KEY, "zoom ongoing, scale: " + detector.getScaleFactor()); return false; } }); 

你重写onTouchEvent:

 @Override public boolean onTouchEvent(MotionEvent event) { mScaleDetector.onTouchEvent(event); return true; } 

如果你手工绘制你的视图,在onScale()中,你可能会将缩放因子存储在一个成员中,然后在绘制onDraw()时调用invalidate()并使用缩放因子。 否则,您可以直接修改onScale()中的字体大小或类似的东西。

我使用本教程实现了TextView缩放。 由此产生的代码是这样的:

 private GestureDetector gestureDetector; private View.OnTouchListener gestureListener; 

并在onCreate()中:

  // Zoom handlers gestureDetector = new GestureDetector(new MyGestureDetector()); gestureListener = new View.OnTouchListener() { // We can be in one of these 2 states static final int NONE = 0; static final int ZOOM = 1; int mode = NONE; static final int MIN_FONT_SIZE = 10; static final int MAX_FONT_SIZE = 50; float oldDist = 1f; @Override public boolean onTouch(View v, MotionEvent event) { TextView textView = (TextView) findViewById(R.id.text); switch (event.getAction() & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_POINTER_DOWN: oldDist = spacing(event); Log.d(TAG, "oldDist=" + oldDist); if (oldDist > 10f) { mode = ZOOM; Log.d(TAG, "mode=ZOOM" ); } break; case MotionEvent.ACTION_POINTER_UP: mode = NONE; break; case MotionEvent.ACTION_MOVE: if (mode == ZOOM) { float newDist = spacing(event); // If you want to tweak font scaling, this is the place to go. if (newDist > 10f) { float scale = newDist / oldDist; if (scale > 1) { scale = 1.1f; } else if (scale < 1) { scale = 0.95f; } float currentSize = textView.getTextSize() * scale; if ((currentSize < MAX_FONT_SIZE && currentSize > MIN_FONT_SIZE) ||(currentSize >= MAX_FONT_SIZE && scale < 1) || (currentSize <= MIN_FONT_SIZE && scale > 1)) { textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, currentSize); } } } break; } return false; } 

魔术常数1.1和0.95是凭经验select的(使用scalevariables来达到这个目的使我的TextViewperformance得有点怪异)。

也有这个项目,完成这项工作,并为我完美工作: https : //github.com/chrisbanes/PhotoView

在蜂窝中,API级别11,有可能,我们可以使用setScalaX和setScaleY与支点
我在这里解释过
完全缩放视图
捏缩放完全查看

我已经创build了一个支持Android 2.1+的基本捏放大项目

可在这里