因此,我创建了RelativeLayout上述主题中描述的的子类。看起来像这样:
public class ZoomableRelativeLayout extends RelativeLayout {float mScaleFactor = 1;float mPivotX;float mPivotY;public ZoomableRelativeLayout(Context context) { super(context); // TODO Auto-generated constructor stub}public ZoomableRelativeLayout(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub}public ZoomableRelativeLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub}protected void dispatchDraw(Canvas canvas) { canvas.save(Canvas.MATRIX_SAVE_FLAG); canvas.scale(mScaleFactor, mScaleFactor, mPivotX, mPivotY); super.dispatchDraw(canvas); canvas.restore();}public void scale(float scaleFactor, float pivotX, float pivotY) { mScaleFactor = scaleFactor; mPivotX = pivotX; mPivotY = pivotY; this.invalidate();}public void restore() { mScaleFactor = 1; this.invalidate();}}我对SimpleOnScaleGestureListener外观的实现如下所示:
private class onPinchListener extends SimpleonScaleGestureListener { float startingSpan; float endSpan; float startFocusX; float startFocusY; public boolean onScaleBegin(ScaleGestureDetector detector) { startingSpan = detector.getCurrentSpan(); startFocusX = detector.getFocusX(); startFocusY = detector.getFocusY(); return true; } public boolean onScale(ScaleGestureDetector detector) { mZoomableRelativeLayout.scale(detector.getCurrentSpan()/startingSpan, startFocusX, startFocusY); return true; } public void onScaleEnd(ScaleGestureDetector detector) { mZoomableRelativeLayout.restore(); }}希望这可以帮助!
更新:
您可以整合
OnPinchListener你的
ZoomableRelativelayout使用
ScaleGestureDetector:
ScaleGestureDetector scaleGestureDetector = new ScaleGestureDetector(this, new onPinchListener());
并且您需要将Zoomable布局的触摸侦听器与ScaleGestureDetector的触摸侦听器绑定:
mZoomableLayout.setonTouchListener(new onTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub scaleGestureDetector.onTouchEvent(event); return true; } });


