gpt4 book ai didi

Android:使用 drawText() 书写时文本不可见

转载 作者:行者123 更新时间:2023-11-29 16:23:53 27 4
gpt4 key购买 nike

          @Override 
protected void onDraw(Canvas canvas)
{
//Note:I do not want to use the canvas object from this function param
//If i do so its working , But i would like to understand why the following is not working

Canvas c =new Canvas();
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
c.drawText("HELLO CANVAS",200,300,paint);
}

更多代码

public class graphicProj extends Activity {

private Canvas canvas;

@Override
public void onCreate(Bundle savedInstanceState) {
{
....

SimpleView simpleview_obj = new SimpleView(this);
setContentView(simpleview_obj);
simpleview_obj.onDraw(canvas);
.....

new GetData().execute();

}
private static class SimpleView extends View {
private ShapeDrawable mDrawable = new ShapeDrawable();
....
protected void onDraw(Canvas canvas) {

//draw graphic objects
....
}
}

public class GetData extends AsyncTask<Void, String, Void> {

@Override
protected void onPreExecute() {
Log.d("PROJ","STARTIN");
}

@Override
protected Void doInBackground(Void... unused) {
////My calculation and reading frm DataStream

}

@Override
protected void onProgressUpdate(String... data) {

//I Keep updating the result...
Paint paint = new Paint();
paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(true);
paint.setColor(Color.WHITE);
canvas.drawText(result, 200, 300, paint);


}

@Override
protected void onPostExecute(Void unused) {
Log.d("PROJ","END");
}
}

}

最佳答案

在这里或在您的其他问题中,您是否提供了足够的信息来说明为什么不能这样做。没有理由在新 Canvas 而不是现有 Canvas 上绘图。

代码无效,因为您的新 Canvas c 没有分配给任何东西。这就像为日志创建一个字符串 myString 但从不使用 Log.d(tag, myString)

编辑(阅读所有评论后)

如果您在 onCreate() 中计算一个值并想在您的 onDraw() 中显示该值,只需这样做即可。将结果存储在成员变量中,您可以在 onDraw() 中访问它。

否则:请提供您的完整代码。我猜你只是做的比它应该做的更复杂......

edit2

您的代码有点乱,并且在您不应该做的地方做了很多事情。所以在 onProgressUpdate() 内部绘图是严重错误的。你应该封装你的计算和绘图。

你应该做什么(我建议使用 SurfaceView 而不是 View,无论如何......):

你应该启动你的 AsynchTask 来更新你想要绘制的字符串。该字符串应该是您 View 中的一个变量,您可以在其中使用它进行绘图。绘图本身应该由绘图线程调用(我记得:使用 SurfaceView 而不是 View 作为父类)。在 onDraw() 内部你应该只使用你的绘画对象,给定的 Canvas 和你想要绘制的字符串(不要忘记使 paint 变量也是一个成员变量以防止重新创建相同的对象出于性能/内存原因一遍又一遍)。

如果您不知道如何使用 SurfaceView,或者如果您想了解如何使用绘图线程,请阅读我关于 2d 绘图的教程:www.droidnova.com/2d-tutorial-series

简短的最后一句话:你以正确的方式做了很多事情,你只是把你做的地方搞混了。您应该尝试重新考虑您真正想要实现的目标以及如何以最简单的方式完成。也许我的教程可以帮助您理清思绪。

关于Android:使用 drawText() 书写时文本不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5635434/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com