Android 在位图上绘制基本体

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);

在自定义视图中,当用户选择标志时,我必须在基本位图上绘制。假设我有一个基本的位图,用户打开胡须标志。由于此自定义视图必须具有可伸缩性,因此我希望使用相对坐标(范围为[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();
}

此外,此自定义视图强制高度等于宽度(它是一个方形形状因子)

画布的参数。比例(浮动,浮动)用作绘图例程中的
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();
}