问题:如何在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帖子,或者一般的自定义视图。没有解决方案正常工作