嗯,这可能有点难以解释,但这是交易:我有一个自定义视图,其中有一个背景图像和一些其他较小的图像。当用户选择保存选项时,整个视图将缩放到某个分辨率,例如900x900px。因此,如果手机是720p,则图像将按比例放大,而如果屏幕为1080p则将按比例缩小。
如何完成缩放:
因此,如果最初屏幕尺寸为720px宽度,当尺寸更改为900px时,我会在onMeasure
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
if (MeasureSpec.getSize(widthMeasureSpec) == 900) {
scale = (900 - viewWidth) * 100.2f / viewWidth;
prepareSaving();
}
}
然后我在绘图时使用这个比例编号:
canvas.drawBitmap(myCachedImage, x + addScale(x), y + addScale(y), imagePaint);
,其中
private float addScale(float value) {
if (scale == 0) {
return 0;
} else {
return (value * scale / 100.2f);
}
}
这允许我在缩放的坐标处绘制位图,这可以按预期工作。 用户旋转图像时出现问题。在旋转我做:
public void rotateSticker(float degrees) {
imageMatrix.setRotate(degrees, imageCenterX + addScale(imageCenterX), imageCenterY +imageCenterY ));
}
在onDraw中我做:
if (angle!=0{
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.setMatrix(imageMatrix);
canvas.drawBitmap(myCachedImage, x + addScale(x), y + addScale(y), imagePaint);
canvas.retore()
}else
{
canvas.drawBitmap(myCachedImage, x + addScale(x), y + addScale(y), imagePaint);
}
这是我的问题:如果用户没有旋转,则所有缩放都正确完成,并且保存的图像看起来很好。如果有一个角度,在缩放时,图像不会在右边坐标中绘制,它会被移动,就像在下面的图像中一样 http://i.imgur.com/bFBHVF1.png
答案 0 :(得分:0)
缩放和旋转的所有问题都是由图像矩阵引起的。当我切换到仅使用视图的canvas.rotate()时,一切都按预期工作。