android捏缩放
我的布局包含button,文字浏览等。是否可以实现捏放大我的布局?
看看下面的链接可能会帮助你
下面的链接提供了最好的例子,您可以重构以满足您的要求。
-
实施最捏变焦gestur
-
Android的捏
-
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的(使用scale
variables来达到这个目的使我的TextView
performance得有点怪异)。
也有这个项目,完成这项工作,并为我完美工作: https : //github.com/chrisbanes/PhotoView
在蜂窝中,API级别11,有可能,我们可以使用setScalaX和setScaleY与支点
我在这里解释过
完全缩放视图
捏缩放完全查看
我已经创build了一个支持Android 2.1+的基本捏放大项目
可在这里