我有一个自定义视图,它在onDraw()上的画布上绘制一些位图。图纸正在运转。请查看代码段:
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.save();
if(appInitialized) {
hsSide.draw(canvas);
scaleA.draw(canvas);
scaleB.draw(canvas);
}
canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);
canvas.restore();
}
我已经实现了一个ScaleGestureListener,它可以在屏幕上应用缩放缩放时缩放画布。问题是画布没有缩放。如果我在canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY);
之前放置if(appInitialized) {
它会缩放画布,但在它之后绘图,即hsSide.draw(canvas);
不缩放。它借鉴了它的正常规模。
这是绘制方法:
hsDide.draw:
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, 0, null);
}
scaleA.draw:
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null);
}
scaleB.draw:
@Override
public void draw(Canvas canvas) {
// TODO Auto-generated method stub
canvas.save();
mMatrix.setRotate(currentAngle, canvas.getWidth()/2, canvas.getHeight()/2);
canvas.setMatrix(mMatrix);
canvas.drawBitmap(mBitmap, canvas.getWidth()/2 - mBitmap.getWidth()/2, canvas.getHeight()/2 - mBitmap.getHeight()/2, null);
canvas.restore();
}
知道我哪里错了...... ???
答案 0 :(得分:4)
查看你的代码,你应该在绘制之前缩放画布,然后在绘制之后恢复它。因此,请按如下方式移动画布比例:
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
canvas.save();
canvas.scale(mScaleFactor, mScaleFactor, pivotX, pivotY); // MOVED HERE.
if(appInitialized) {
hsSide.draw(canvas);
scaleA.draw(canvas);
scaleB.draw(canvas);
}
canvas.restore();
}
然后您将绘图大小基于画布大小。因此,当您缩放画布时,仍然会将其绘制为整个大小,然后调整回原来的大小。因此没有任何影响。
您需要做的是将画布尺寸 BEFORE 缩放,然后将其传递给您的draw方法。然后使用这些尺寸绘制到画布上。