我正在尝试销售位图并在每一步翻译它。
如果我们查看以下代码,我正在绘制图像,进行平移和缩放,然后反向执行相同的操作,以便恢复原始配置。但是在应用这些操作之后,我确实获得了原始的缩放图像(比例因子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);
}
答案 0 :(得分: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);
}
答案 1 :(得分:1)
我认为原始代码的问题可能是因为缩放和翻译的方式使用了缩放/翻译的点。如果您在操作之间指定了正确的轴心点,那么事情就可以了。