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

时间:2011-04-12 12:49:20

标签: android graphics canvas drawtext

          @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");
        }
    }

}

1 个答案:

答案 0 :(得分:4)

在此处或您的其他问题中,您是否提供了为什么can't do that的足够信息。没有理由使用新画布而不是现有画布。

代码无效,因为您的新Canvas c未分配给任何内容。就像为日志创建字符串myString但从不使用Log.d(tag, myString)

编辑(阅读完所有评论后)

如果你在onCreate()中计算一个值并希望在onDraw()中显示该值,那就这样做。将结果存储在成员变量中,您可以在onDraw()中访问它。

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

<强> EDIT2

你的代码有点混乱,在你不应该做的事情上做了很多事情。所以在onProgressUpdate()内画画是非常错误的。你应该封装你的计算和绘图。

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

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

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

一句简短的句子:你以正确的方式做了很多事情,你只是混淆了你所做的事情。您应该尝试重新思考您真正想要实现的目标以及如何以最简单的方式完成。也许我的教程有助于清除你的想法。