Android画布缩放 - imageview未缩放

时间:2016-11-10 17:45:55

标签: android canvas imageview zoom pinch

问题:如何在onDraw()方法中通过canvas.scale()调整画布大小调整自定义imageview的大小?

我在实现自定义ImageView的缩放缩放时遇到问题。我正在使用Android开发者网站上的示例:

private ScaleGestureDetector mScaleDetector;
private float mScaleFactor = 1.f;

public MyCustomView(Context mContext){
    ...
    // View code goes here
    ...
    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);
    ...
    // onDraw() code goes here
    ...
    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;
    }
}

这里的问题是:canvas.scale(mScaleFactor,mScaleFactor)调整画布的大小,但是不会相应地调整包含Imageview的大小。例如,如果图像被放大,则它看起来被剪裁。由于图像中的图像被正确放大和缩小,但图像视图不是。

我尝试使用以下代码替换cavnas.scale()

setScaleX (mScaleFactor);
setScaleY (mScaleFactor);

此代码可以缩放整个视图。但是这种方法存在的问题是,它并不平滑而且闪烁。

我查看了现有的库,不喜欢它们,因为它们太复杂而且只是为了添加缩放功能,需要包含一大堆类和接口。我想有一个只支持两个功能的imageview:平移和缩放,如果可能的话,我会从这个简单的方法开始,而不是使用这些库。

我已经查看过很多关于使用imageview实现缩放功能的StackOverflow帖子,或者一般的自定义视图。没有解决方案正常工作

0 个答案:

没有答案