2016-01-28 101 views
0

我遇到問題。我需要在圖像上繪製一些圓圈,但我不知道爲什麼,它只繪製一個圓圈。我把下面的代碼來解釋它更好地:我無法在圖像上繪製多個圓圈

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中我想畫點的COORDS,也是這個COORDS相對於圖像,所以我要乘那COORDS爲imagewidht和imageheight。

它只繪製一個綠色圓圈,但我需要繪製(在那個追逐中)五個綠色點和四個紅色點。

我把數組列表信息太:

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]

彩之= [2,2,2,2,2,1,1,1,1]

感謝!

+1

'Float.parseFloat(presasX。 get(i))* myImage.getWidth()' - 給定'presasX.get(0)== 49.583333333333',這將是一個非常大的數字,超出了圖像的範圍。 –

+0

我除以100,但它是一樣的。任何想法? – Imrik

+0

檢查此問題http://stackoverflow.com/questions/30288768/draw-on-canvas-multiple-times – seema

回答

0

這是因爲佈局沒有充分膨脹,因此myImage.getWidth()和getHeight()返回0.所以實際上,所有圓的中心是相同的(ImageView的左上角)和下一個一個覆蓋前一個。

對於實際的寬度和高度可以使用ViewTreeObserver.addOnGlobalLayoutListener或編程方式創建與所需尺寸的ImageView或創建擴展標準ImageView的定製視圖和實施其onDraw()等等