我有一個程序,它以螺旋形狀繪製一堆紅色框。我有一切工作,除了我不知道如何推遲這個過程,所以你可以看到螺旋形成。 我把我的代碼放在for循環中,並用while循環和500ms延遲將它移動到Runnable。該程序旨在停止onClick或如果它運行49次。使用處理程序將重複任務延遲有限次
我太心急,看最後的結果,因爲我的手機剛減慢當我開始螺旋,且沒有動畫
Runnable run = new Runnable(){
@Override
public void run(){
if(row>=0 && (dir==0 && (row==6 || grid[row+1][col]!=null)) ||
(dir==1 && (col==6 || grid[row][col+1]!=null)) ||
(dir==2 && (row==0 || grid[row-1][col]!=null)) ||
(dir==3 && (col==0 || grid[row][col-1]!=null)))
dir++;
dir=dir%4;
switch(dir){
case 0: row++;break; //down
case 1: col++;break; //right
case 2: row--;break; //up
case 3: col--;break; //left
}
grid[row][col] = new ImageView(t);
RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(88, 88);
layoutParams.setMargins((width/2)-(450)+(88 * row) + (35 * (row + 1))+c, (height/2)-655+(88 * (col+1)) + (35 * (col + 1))+c ,0,0);
grid[row][col].setLayoutParams(layoutParams);
grid[row][col].setImageResource(R.drawable.redbox);
layout.addView(grid[row][col]);
x++;
c++;
c=c%7;
while(!stop && x<49)
h.postDelayed(run,500);
}
};
public void spiral() {
c=0;
row=-1;
col=0;
dir =0;
run.run();
}
所以你的問題是...? – rupps 2014-12-06 01:57:20
我怎樣才能使這實際上有500毫秒延遲動畫?它不起作用。使用計時器還是其他的更好? – Zach 2014-12-06 02:02:55
刪除的同時,你正在調用函數無限次!將其更改爲:if((x <49)&&(!stop))h.postDelayed(run,500);' – rupps 2014-12-06 02:28:14