在安卓中缩放和平移位图

5
我想销售一幅位图,并在每个步骤中进行翻译。
如果我们看以下代码,我正在绘制一张图片,平移和缩放它,然后执行相同的操作,以便得到原始配置。但是,在应用操作后,我确实获得了原始缩放图像(比例因子为1),但图像被平移到不同的位置。
请问您能否指出正确的方法?(在上面的示例中,如何达到原始配置?)
 protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Matrix matrix = new Matrix();

        scale = (float)screenWidth/201.0f;
        matrix.setTranslate(-40, -40);
        matrix.setScale(scale, scale);

        canvas.drawBitmap(bitMap, matrix, paint);

        //back to original
        canvas.drawColor(0, Mode.CLEAR);
        matrix.setScale(1.0f/scale, 1.0f/scale);
        matrix.setTranslate(40,40);
        canvas.drawBitmap(bitMap, matrix, paint);

    }

请参考以下链接,它会对你有所帮助:点击此处 - Sakthivel Appavu
Matrix.setXXX 将首先重置矩阵并设置值。 - chen
2个回答

6

您应该使用Canvas方法进行缩放和平移,这样您就可以利用save()restore() API完成所需的操作。例如:

protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);

    //Save the current state of the canvas
    canvas.save();

    scale = (float) screenWidth / 201.0f;

    canvas.translate(-40, -40);
    canvas.scale(scale, scale);
    canvas.drawBitmap(bitMap, 0, 0, paint);

    //Restore back to the state it was when last saved
    canvas.restore();

    canvas.drawColor(0, Mode.CLEAR);
    canvas.drawBitmap(bitMap, 0, 0, paint);
}

这解决了我的问题,但是有什么提示可以告诉我为什么我的代码不起作用吗? - User42

1
我认为您的原始代码问题可能是由于缩放和平移使用的点周围的方式不同。如果您在操作之间/之前指定正确的枢轴点,则一切都会没问题。

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