Android 如何从异步任务在画布上绘制?
我有一个名为RectLine的类,它从Android 如何从异步任务在画布上绘制?,android,canvas,Android,Canvas,我有一个名为RectLine的类,它从AsyncTask扩展而来。 在MainActivity类中,在方法onDraw(画布)中创建一个RectLine(l1)对象。我还传递了画布的引用并绘制绘制所需的对象。然而,当我调用l1.execute()方法时,我在屏幕上看不到任何东西。 我只能看到我在doInBackground方法上打印的日志消息,因此我确信代码执行得很好。 但设备屏幕上没有打印任何内容 @Override protected void onDraw(Canvas c
AsyncTask
扩展而来。
在MainActivity
类中,在方法onDraw(画布)
中创建一个RectLine
(l1
)对象。我还传递了画布的引用
并绘制绘制所需的对象。然而,当我调用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;
}
@覆盖
受保护的void onDraw(画布){
super.onDraw(帆布);
油漆=新油漆();
paint.setColor(Color.parseColor(#CD5C5C));
//新线性矩形(x1,y1,x2,y2,b)
LineaRecta l1=新的LineaRecta(0,getHeight(),getWidth(),0,getHeight());
LineaRecta l1=新的LineaRecta(0,getHeight(),getWidth(),0,getHeight());
l1.setAnchoCanvas(getWidth());
l1.setCanva(帆布);
l1.设置油漆(油漆);
l1.execute();
}
@凌驾
受保护的空位背景(空位…空位){
浮动y;
对于(float x=0;x我认为您不能在doInBackground(Void…voids)
中使用以下行:
为了实现目标,您可以在后台计算仍在运行时调用UI线程,方法是在doInBackground方法中调用publishProgress()以下方法。要从后台在mainUI线程中执行某些操作,请使用此包装器:
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//do something
}
});
要重新绘制视图,请使用以下代码:
myview.invalidate();
是,要重新绘制视图,请使用以下代码:
myview.invalidate();这是主UI线程的重点。尽管在异步任务中,您可以实现onPostExecute()方法,然后调用UI线程来绘制圆。您可以使用后台线程来告诉UI线程绘制一些东西,但不能直接从后台线程绘制。然后在onProgressUpdate()
中进行绘制,OP需要在AsyncTask子类中重写该操作。
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
//do something
}
});