0

傢伙我想用不同的顏色來畫一個弧線,但它並不顯示在活動任何東西,我是新到Android,OnDraw的android系統中的ImageView,哪些錯誤

感謝,

@Override 
public void onDraw(Canvas canvas) 
{ 
    try { 
     Paint paint=new Paint(); 
     paint.setColor(Color.RED); 

     Random rnd = new Random(); 
     paint.setAntiAlias(true); 
     paint.setStrokeWidth(12); 

     Path obj=new Path(); 
     RectF rf=new RectF(); 
     RectF rectF = new RectF(50, 20, 500, 580); 
     canvas.drawArc (rectF, 90, 45, true, paint); 


     int i; 
     for(i=0;i<500;i++) 
     { 

      Thread.sleep(10000); 
      paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
      canvas.drawPath(obj, paint); 
     } 

    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

回答

1

1)在onDraw不良練習中創建鉛筆。 (長工作)

2)你需要super.onDraw

@Override 
    public void onDraw(Canvas canvas) 
    { 
     super.onDraw(canvas); 

3)刪除了Thread.sleep(10000);

4)您需要一個asynctask,它將在onProgressUpdate中調用invalidate()。您的代碼如下所示:

class StupidTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected Void doInBackground(Void... params) { 
     try { 
     int i; 
     for(i=0;i<500;i++) 
     { 
      Thread.sleep(10000); 
      paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
      publishProgress(); 
     } 

     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
      return null; 
     } 

     @Override 
     protected void onProgressUpdate(Void... params) { 
      super.onProgressUpdate(values); 
      postInvalidate(); 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
      invalidate(); 
     } 
} 
+0

我想顯示,像一個動畫,不斷吸引,直到我們阻止他們。這就是爲什麼我使用線程,你能建議我怎麼做? –

+2

@RussianFederation onDraw方法在主(UI線程)中被調用。當你做你所做的事情時,UI線程永遠掛在你的onDraw方法中,導致Android無法重繪任何東西!你必須調用invalidate()方法來重畫。這個答案建議在asynctask中做。事實上這是正確的答案。 –

0

我的猜測是onDraw方法實際需要完成。因此,請儘量讓您的線程在活動中休眠並每10秒使視圖無效,這將再次調用onDraw

0

1)如果您只是想使用不同的顏色繪製弧線,這是我的代碼。

paint = new Paint(); 
rectF = new RectF(50, 20, 500, 580); 
paint.setAntiAlias(true); 
paint.setColor(Color.RED); 
canvas.drawColor(Color.GREEN); 
paint.setStrokeWidth(12); 

int startAngle = 90,sweepAngle = 45; 
for(int i = 0; i < 10; i++) 
{ 
    paint.setARGB(255, rnd.nextInt(256), rnd.nextInt(256), rnd.nextInt(256)); 
    canvas.drawArc(rectF, startAngle, sweepAngle, true, paint); //繪製圓弧 
    startAngle += sweepAngle; 
} 

2)可以使用canvas.drawPath()來繪製任何指定的路徑,像

rnd = new Random(); 
obj = new Path(); 
obj.moveTo(50, 100); 
for(int i = 0; i < 10; ++i) 
{ 
    obj.lineTo(rnd.nextInt(100), rnd.nextInt(100)); 
} 
canvas.drawPath(obj, paint); 

3)用這樣的觀點:

<com.zfeng.stackquesdraw.TestOnDraw 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" />