我需要改变缩放的方式并将我的imageview移动到使用矩阵而不是调用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说无法修改矩阵。任何帮助都会很棒!
答案 0 :(得分:1)
好的,我发现了问题所在。我使用setImageMatrix(m)
来应用于整个ImageView子类,而不是为画布设置矩阵,如下所示:
@Override
protected void onDraw(Canvas canvas){
...
canvas.concat(transform);
}
我不确定这两者之间有什么区别,如果有人知道看到difference bewteen imageMatrix and matrix
编辑:使用canvas.setMatrix(transform)
搞砸了滚动;建议使用canvas.concat(transform)
来做这个技巧
答案 1 :(得分:0)
如果你尝试怎么办?
m.setScale(scaleFactor, scaleFactor);
m.postTranslate(zoomCenter[0], zoomCenter[1]);
我也相信不需要child.setScaleType(ScaleType.MATRIX)
。至少我的编码没有它。