2015-03-01 1 views
0

это класс вид:Android Посмотреть класс нить остановки в цикле во второй итерации

public class Ball extends View implements Runnable { 


    public Ball(Context context) { 
     super(context); 
     ActionBar.LayoutParams lp = new ActionBar.LayoutParams(500, 200); 
     //setY(100); 
     this.setLayoutParams(lp); 
     Log.d("test", "Ball created"); 
     Thread t = new Thread(this); 

     t.start(); 
    } 


    public void run() { 

     try { 



      while (!Thread.currentThread().isInterrupted()) { 

       float y = getY(); 

       Log.d("test", "first y: " + y); 
       Log.d("test", "LINE --- LINE"); 
       y = y + 30; 
       Log.d("test", "setting y: " + y); 
       setY(y); 

       Log.d("test", "before sleep"); 
       Thread.currentThread().sleep(1000); 
       Log.d("test", "after sleep"); 
      } 
     } 
     catch(Throwable e) 
     { 
      Log.d("error", e.getMessage()); 
     } 

    } 

    @Override 
    protected void onDraw(Canvas canvas) { 

     Log.d("test", "onDraw called"); 
     super.onDraw(canvas); 
     int x = getWidth(); 
     int y = getHeight(); 
     int radius; 
     radius = 100; 
     Paint paint = new Paint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(Color.WHITE); 
     canvas.drawPaint(paint); 
     // Use Color.parseColor to define HTML colors 
     paint.setColor(Color.parseColor("#FF0000")); 

     canvas.drawRect(0, 0, this.getWidth(), this.getHeight(), paint); 
     paint.setColor(Color.parseColor("#CD5C5C")); 
     canvas.drawCircle(0 + radius, 0 + radius, radius, paint); 
     Log.d("test", "onDraw Ended"); 
    } 

} 

в методе выполнения, внутри цикла, если я изменить его на:

y = y; 

или даже:

y = 30; //or any other number 

нить продолжает работать, но если код:

y = y + 30; // or any other number 

, то во второй итерации (я не знаю, почему именно 2 итерации) после выполнения setY (y), он останавливается и никаких ошибок не выбрасывает, я не могу понять причину этого, может кто-нибудь есть некоторые подсказки о том, что может быть причиной этого?

Я просто хочу, чтобы мяч, чтобы изменить положение у каждого второго

ответ

0

Это довольно странный способ обновления данных для создания анимации. Для таких целей построен метод: postInvalidateDelayed.

@Override protected void onDraw(Canvas canvas) { 
    //calculate data 
    //animate it 
    postInvalidateDelayed(1000/30);//request drawing 30 frames per second. 
} 
+0

wow, это действительно работает, но до сих пор не знаю, почему мой код не работал, в любом случае спасибо – Jnuker

Смежные вопросы