Android 画布缩放(-1,1)

5
我的目标是将一张图片水平翻转,然后在画布上绘制它。目前我正在使用canvas.scale(-1,1)来实现这个效果,它有效地将图像水平绘制出来,但它也会影响x轴的值,在缩放之前,x位置为150,在缩放之后,我必须将其切换到-150才能在相同的位置渲染。

我的问题是,如何使得在缩放前后x值都为150,而不必在缩放后调整x位置?有没有更有效的方法可以做到这一点,而不会影响性能?
3个回答

8

我知道这个问题很久了,但我碰巧遇到了同样的问题。在我的情况下,当我在扩展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);
}

1
我通过在使用位图之前对其应用转换来解决了这个问题:
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);

0
你尝试过重复使用 canvas.scale(-1, 1) 吗?这将有效地移除变换,因为两个负数相乘得到正数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接