代码之家  ›  专栏  ›  技术社区  ›  methodin

android canvas.scale(-1,1)

  •  5
  • methodin  · 技术社区  · 14 年前

    所以我的目标是水平翻转一个图像,然后在画布上绘制它。目前我使用的是canvas.scale(-1,1),它可以有效地水平地工作和绘制图像,但是它也使用x轴值,在缩放之前,x位置是150,在我必须将其切换到-150才能在同一个点进行渲染之后。

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

    3 回复  |  直到 14 年前
        1
  •  8
  •   Japtar    14 年前

    我知道这个问题很古老,但我碰巧遇到了同样的问题。在我的情况下,当我在扩展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);
    }
    
        2
  •  1
  •   methodin    14 年前

    我通过在像这样使用位图之前对其应用转换来修复此问题:

    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);
    
        3
  •  0
  •   user153498    14 年前

    你试过重复一下吗? canvas.scale(-1, 1) ?它将有效地消除转换,因为两个否定构成一个肯定。