2010-11-25 77 views
0

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

offtopic:包通常命名为喜欢com.company.product.application.class,而不是在还原prder。 – 2010-11-25 13:35:52

回答

0

你需要调用invalidate();您的视图中,为了使OnDraw的方法再次调用。 onDraw应该是这样的:

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

另外,不要在onDraw方法中创建处理程序和runnable。 onDraw方法将被多次调用,无论何时需要,并且您不想创建尽可能多的runnable。

在你的构造:

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 
+0

我试过这个...但行不闪烁...因为它不刷新屏幕上 – hehas 2010-11-25 14:03:18