Android canvas.scale(-1,1)

时间:2010-10-11 00:14:13

标签: android graphics canvas

所以我的目标是水平翻转图像然后在画布上绘制。目前我正在使用canvas.scale(-1,1),它可以有效地工作并水平绘制图像,但是它也会固定x轴值,在x刻度之前,x位置为150,之后我必须切换它在-150到同一地点渲染。

我的问题是,如何在两种情况下都能使x值为150,而无需在比例后调整x位置?有没有更有效的方法来做到这一点而不会影响性能?

3 个答案:

答案 0 :(得分: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 :(得分: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);

答案 2 :(得分:0)

您是否尝试重复canvas.scale(-1, 1)?它将有效地消除转变,因为两个消极因素是积极的。