小弟練習寫的代碼如下,但它只能一次性顯示10個圓,要怎么改才能令它能慢慢一個接一個得顯示出來,謝謝大佬們

public class DrawCircle extends View
{
Paint p;
int color;
int x=0;
int y=0;
int r=0;
int n=0;
public DrawCircle(Context con,AttributeSet attr)
{
super(con,attr);
p = new Paint(Paint.ANTI_ALIAS_FLAG);
}
@Override
protected void onDraw(Canvas c)
{
super.onDraw(c);
while(n<10)
{
gen();
p.setColor(color);
p.setStyle(Paint.Style.FILL);
c.drawCircle(x, y, r, p);
sleep(500);
n++;
}
}
public void gen()
{
color = Color.rgb(rand(0,255),rand(0,255),rand(0,255));
x=rand(0,1200);
y=rand(0,1200);
r=rand(50,150);
}
public int rand(int a, int b)
{
return((int)((b-a+1)*Math.random() + a));
}
public void sleep (long ms)
{
try
{
Thread.sleep(ms);
}
catch(InterruptedException e)
{
e.printStackTrace();
}
}
}
下面是簡單得MainActivity
public class MainActivity extends AppCompatActivity {
DrawCircle drawCircle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
drawCircle = new DrawCircle(this,null);
setContentView(drawCircle);
}
}
uj5u.com熱心網友回復:
Android所有的繪制都是在一個執行緒里的,如果你sleep了就會卡死,并不會畫出來。原因很簡單:單執行緒的代碼sleep了后面的代碼怎么執行?主執行緒延時的方式最常用的就是handler。
思路就是:handler延時500,Activity沒finish并且n<10呼叫invalid,draw的時候根據n畫圓的個數。
再說回來,新手應該先練習寫布局,自定義view這種等你各種布局樣式都寫煩了再學吧。
uj5u.com熱心網友回復:
考慮Thread/AsyncTask執行緒計數的方式,到達計數條件執行invalidate();注意執行緒的生命周期維護,Thread考慮使用執行緒池控制
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/207343.html
標籤:Android
上一篇:andoid10的avb問題?
