我有一个名为RectLine的类,它从AsyncTask
扩展而来。
在MainActivity
类中,在方法onDraw(Canvas canvas)
中创建了RectLine
(l1
)对象。我还传递了绘制所需的Canvas
和Paint对象的引用。但是,当我调用l1.execute()
方法时,屏幕上看不到任何内容。
我只能看到我在doInBackground
方法上打印的日志信息,因此我确信代码执行得很好。
但设备屏幕上没有任何内容。
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
paint.setColor(Color.parseColor("#CD5C5C"));
//new LineaRecta(x1, y1, x2, y2, b)
LineaRecta l1 = new LineaRecta(0, getHeight(), getWidth(), 0, getHeight());
LineaRecta l1 = new LineaRecta( 0, getHeight(), getWidth(), 0, getHeight());
l1.setAnchoCanvas(getWidth());
l1.setCanva(canvas);
l1.setPaint(paint);
l1.execute();
}
@Override
protected Void doInBackground(Void... voids) {
float y;
for(float x=0; x<anchoCanvas;x++){
y=(m*x)+b;
canvas.drawCircle(x, y, Punto.RADIO, paint);
}
return null;
}
我的猜测是,我不能直接从后台线程画在画布上。
这是对的吗? 有什么更好的方法呢?
答案 0 :(得分:3)
要在后台的mainUI线程中执行某些操作,请使用此包装器:
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//do something
}
});
重绘您的视图使用此代码:
myview.invalidate();
&lt; - 此方法调用您视图的onDraw()
。
答案 1 :(得分:0)
我认为您无法在doInBackground(Void... voids)
中使用以下行:
canvas.drawCircle(p.getX(), p.getY(), Punto.RADIO, paint);
为了实现您的目标,您可以通过在doInBackground方法中调用publishProgress()以下方法来调用UI线程,同时后台计算仍在运行。
答案 2 :(得分:0)
是的,要重新绘制您的视图,请使用以下代码:
myview.invalidate(); &lt; - 此方法调用视图的onDraw()。
paoladelloglio.54