所以我的目标是水平翻转图像然后在画布上绘制。目前我正在使用canvas.scale(-1,1),它可以有效地工作并水平绘制图像,但是它也会固定x轴值,在x刻度之前,x位置为150,之后我必须切换它在-150到同一地点渲染。
我的问题是,如何在两种情况下都能使x值为150,而无需在比例后调整x位置?有没有更有效的方法来做到这一点而不会影响性能?
答案 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)
?它将有效地消除转变,因为两个消极因素是积极的。