【发布时间】:2013-08-23 16:58:59
【问题描述】:
我需要更改缩放和移动图像视图的方式,以使用矩阵而不是调用 canvas.scale(,,,,),但我无法确定执行此操作的正确调用。
我在我的 ScaleListener 侦听器类的 onScale 方法中有这个
public boolean onScale(ScaleGestureDetector detector) {
...//determining zoom level and pivot points offset
child.zoom(scaleFactor, zoomCenter[0], zoomCenter[1]);
}
我有在子ImageView的onDraw方法中:
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.scale(mScaleFactor, mScaleFactor, mPosX, mPosY);
...
//do all the drawing here
}
public void zoom(float scaleFactor, float zoomCenterX, float zoomCenterY) {
mScaleFactor = scaleFactor;
mPosX = zoomCenterX;
mPosY = zoomCenterY;
//redraw and remeasure the mapview after zooming in
invalidate();
}
我想在 onScale 方法中使用类似的东西:
public boolean onScale(ScaleGestureDetector detector) {
...//calculating scale and offsets
Matrix m = child.getImageMatrix();
m.reset();
m.postScale(scaleFactor, scaleFactor);
m.postTranslate(zoomCenter[0], zoomCenter[1]);
child.setScaleType(ScaleType.MATRIX);
child.setImageMatrix(m);
child.invalidate();
return true;
}
但这似乎没有做任何事情......我在这里错过了什么吗?我尝试使用 child.getMatrix() 代替,但通过 IllegalStateException 表示无法修改矩阵。任何帮助都会很棒!
【问题讨论】:
标签: android matrix android-imageview android-canvas