在我的自定义视图中,当用户选择标记时,我必须在基本位图上绘制。假设我有一个基本的 face 位图,用户打开小胡子标志。由于此自定义视图必须是可伸缩的,因此我希望使用相对坐标(在[0,1]范围内)而不是位图宽度和高度。以下不起作用
Bitmap orig, face;
public void onDraw(Canvas c) {
c.drawBitmap(face);
}
public void onMustacheFlag() {
face = Bitmap.create(orig);
Canvas c = new Canvas(face);
c.save();
c.scale(1f / face.getWidth(), 1f / face.getHeight());
// Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f]
c.restore();
}
此外,此自定义视图强制高度等于宽度(它是方形外形)
答案 0 :(得分:0)
Canvas.scale(float, float)
的参数用作绘图程序中x
e和y
坐标的系数。传递1f / width
意味着将范围(0,1)中假定的值乘以小于1的数字,因此所有绘制例程的结果都会在左上角结束,并且可能不可见。相反,如果我传递width
和height
,代码将按预期工作,因为范围(0,1)映射到(0,宽度):
public void onMustacheFlag() {
face = Bitmap.create(orig);
Canvas c = new Canvas(face);
c.save();
c.scale(face.getWidth(), face.getHeight()); // instead of 1 / width
// Draw lines, circle, rectangles with all vertices in the range [0.0f, 1.0f]
c.restore();
}