我有问题。我需要在图像上绘制一些圆圈,但我不知道为什么,它只绘制一个圆圈。我把下面的代码更好地解释了:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.previsualizacion);
myImage = (ImageView) findViewById(R.id.imageView1);
ctx = getApplicationContext();
//Obtenemos la información del layout anterior y la asignamos al tamaño del paso
data = getIntent();
myBundle = data.getExtras();
presasX = myBundle.getStringArrayList("arrayPixelX");
presasY = myBundle.getStringArrayList("arrayPixelY");
colores = myBundle.getStringArrayList("arrayColores");
Bitmap bitMap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);
bitMap = bitMap.copy(bitMap.getConfig(), true);
Canvas canvas = new Canvas(bitMap);
Paint paint = new Paint();
paint.setColor(Color.RED);
paint.setStyle(Style.FILL_AND_STROKE);
//paint.setStrokeWidth(0.5f);
paint.setAntiAlias(true);
myImage.setImageBitmap(bitMap);
//changed set image resource to set image background resource
myImage.setBackgroundResource(R.drawable.pared);
for(int i = 0; i < presasX.size(); i++)
{
if(colores.get(i).equals("1"))
{
paint.setColor(Color.GREEN);
}
else if(colores.get(i).equals("2"))
{
paint.setColor(Color.RED);
}
else if(colores.get(i).equals("3"))
{
paint.setColor(Color.YELLOW);
}
canvas.drawCircle(Float.parseFloat(presasX.get(i)) * myImage.getWidth() / 100, Float.parseFloat(presasY.get(i)) * myImage.getHeight() / 100, 3, paint);
}
//invalidate to update bitmap in imageview
myImage.invalidate();
}
我在一些ArrayList上有我要绘制的点的坐标,这个坐标也是相对于图像的,所以我必须将这些坐标乘以imagewidht和imageheight。
它只绘制一个绿色圆圈,但我需要绘制(在那个追逐中)五个绿点和四个红点。
我也提出了arraylist信息:
presasX = [49.583333333333,80.833333333333,13.541666666667,4.5833333333333,77.708333333333,49.583333333333,4.5833333333333,95.208333333333,96.875]
presasY = [49.722222222222,5,22.5,20.277777777778,33.888888888889,49.722222222222,20.277777777778,54.722222222222,61.666666666667]
colores = [2,2,2,2,2,1,1,1,1]
非常感谢!
答案 0 :(得分:0)
这是因为布局没有完全膨胀,因此myImage.getWidth()和getHeight()返回0.所以实际上你所有圆圈的中心都是相同的(ImageView的左上角)和下一个圆圈的中心正在覆盖前一个。
对于实际宽度和高度,您可以使用ViewTreeObserver.addOnGlobalLayoutListener或以编程方式创建具有所需尺寸的ImageView,或创建扩展标准ImageView并实现其onDraw()等的自定义视图。