почему линия не обновляется? - PullRequest
0 голосов
/ 25 ноября 2010

LineRefresh.java:

package LineRefresh.xyz.com;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

public class LineRefresh extends Activity {
DrawView drawView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    drawView = new DrawView(this);
    drawView.setBackgroundColor(Color.WHITE);
    setContentView(drawView);

}
}

DrawView.java:

package LineRefresh.xyz.com;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.view.View;

public class DrawView extends View {
Paint paint = new Paint();

public DrawView(Context context) {
    super(context);

}

@Override
public void onDraw( final Canvas canvas) { 
 paint.setColor(Color.BLACK);
 canvas.drawLine(50, 200, 270, 200, paint);  
    final Handler handler = new Handler();
    Runnable runnable = new Runnable() {
     public void run() {      
         paint.setColor(Color.BLACK);
      canvas.drawLine(50, 200, 270, 200, paint); 
      handler.postDelayed(this, 1000);
     }
    };                 
}

}

1 Ответ

0 голосов
/ 25 ноября 2010

Вам нужно вызвать invalidate(); внутри вашего представления для повторного вызова метода OnDraw. OnDraw должен выглядеть примерно так:

public void onDraw( final Canvas canvas) { 
 paint.setColor(color);
 canvas.drawLine(50, 200, 270, 200, paint);                
}

Кроме того, не помещайте создание обработчика и выполняемый внутри метода onDraw. Метод onDraw будет вызываться много раз, когда это необходимо, и вы не хотите создавать столько исполняемых файлов.

В вашем конструкторе:

color = Color.Black;    
final Handler handler = new Handler();
Runnable runnable = new Runnable() {
 public void run() {
  // change color
  color = color == Color.Red ? Color.Black : Color.Red;      
  invalidate(); 
  handler.postDelayed(this, 1000);
 }
}; 
handler.postDelayed(runnable, 1000); // You need this to call the handler for the first time
...