我的目标是将一张图片水平翻转,然后在画布上绘制它。目前我正在使用canvas.scale(-1,1)来实现这个效果,它有效地将图像水平绘制出来,但它也会影响x轴的值,在缩放之前,x位置为150,在缩放之后,我必须将其切换到-150才能在相同的位置渲染。
我的问题是,如何使得在缩放前后x值都为150,而不必在缩放后调整x位置?有没有更有效的方法可以做到这一点,而不会影响性能?
我知道这个问题很久了,但我碰巧遇到了同样的问题。在我的情况下,当我在扩展ImageButton类的类上绘图时,必须翻转画布。幸运的是,对于这种特定情况的解决方案比我想象的更优雅。只需按如下方式覆盖onDraw(Canvas)
方法:
@Override
protected void onDraw(final Canvas canvas) {
// Scale the canvas, offset by its center.
canvas.scale(-1f, 1f,
super.getWidth() * 0.5f, super.getHeight() * 0.5f);
// Draw the button!
super.onDraw(canvas);
}
public void applyMatrix(Matrix matrix) {
mBitmap = Bitmap.createBitmap(mBitmap, 0, 0,
mBitmap.getWidth(), mBitmap.getHeight(), matrix, true);
}
...
Matrix matrix = new Matrix();
matrix.preScale(-1, 1);
mSprite.applyMatrix(matrix);
canvas.scale(-1, 1)
吗?这将有效地移除变换,因为两个负数相乘得到正数。