Android canvas.scale(-1,1)

met*_*din 5 graphics android canvas

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

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

Jap*_*tar 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);
}
Run Code Online (Sandbox Code Playgroud)


met*_*din 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);
Run Code Online (Sandbox Code Playgroud)