缩放和翻译自定义视图

时间:2018-04-20 07:51:44

标签: java android zoom scaling translate

我需要能够在我的视线上捏缩放,我希望枢轴点在我的手指中间。我还需要视图是双指可滚动的。我的问题是,如果我还没有滚动视图,它会正确地放大我的手指中心。但如果我在翻译视图后进行缩放,则不会。当我缩放然后再缩放时,它似乎也随机传送。

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    canvas.save();
    canvas.translate(dx, dy);
    canvas.scale(mScaleFactor, mScaleFactor,milieudoigtsX,milieudoigtsY);
    ... //my draw instructions
    canvas.restore();
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {



    @Override
    public boolean onScaleBegin(ScaleGestureDetector detector) {
        PlotView.this.milieudoigtsX = (PlotView.this.mPrimStartTouchEventX+PlotView.this.mSecStartTouchEventX)/2;
        PlotView.this.milieudoigtsY = (PlotView.this.mPrimStartTouchEventY+PlotView.this.mSecStartTouchEventY)/2;
        return true;
    }

    @Override
    public boolean onScale(ScaleGestureDetector detector) {
        PlotView.this.mScaleFactor *= detector.getScaleFactor();

        PlotView.this.mScaleFactor = Math.max(0.1f, Math.min(mScaleFactor, 10.0f));

        invalidate();
        return true;
    }
}

private class GestureListener extends GestureDetector.SimpleOnGestureListener {

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
        PlotView.this.dy -= distanceY;
        PlotView.this.dx -= distanceX;
        invalidate();
        return true;
    }


}

我必须精确地检测到捏合或滚动动作,因此我的手势监听器和我的音阶监听器不会同时被调用。

感谢您的帮助

0 个答案:

没有答案