Android 在位图上绘制基本体
在自定义视图中,当用户选择标志时,我必须在基本位图上绘制。假设我有一个基本的面位图,用户打开胡须标志。由于此自定义视图必须具有可伸缩性,因此我希望使用相对坐标(范围为[0,1]),而不是位图宽度和高度。下面的方法不起作用Android 在位图上绘制基本体,android,drawing,Android,Drawing,在自定义视图中,当用户选择标志时,我必须在基本位图上绘制。假设我有一个基本的面位图,用户打开胡须标志。由于此自定义视图必须具有可伸缩性,因此我希望使用相对坐标(范围为[0,1]),而不是位图宽度和高度。下面的方法不起作用 Bitmap orig, face; public void onDraw(Canvas c) { c.drawBitmap(face); } public void onMustacheFlag() { face = Bitmap.create(orig);
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();
}
此外,此自定义视图强制高度等于宽度(它是一个方形形状因子)画布的参数。比例(浮动,浮动)用作绘图例程中的
x
e和y
坐标的系数。传递1f/width
意味着将范围(0,1)中假定的值乘以小于1的数字,因此所有绘图例程的结果都会出现在左上角,并且可能不可见。相反,如果我通过了width
和height
,代码将按预期工作,因为范围(0,1)映射到(0,width):
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();
}