Android: текст не виден при записи с помощью drawText () - PullRequest
1 голос
/ 12 апреля 2011
          @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 Ответ

4 голосов
/ 12 апреля 2011

Не здесь или в вашем другом вопросе вы предоставили достаточно информации о почему вы can't do that. Нет причин рисовать на новом холсте вместо уже существующего.

Код не работает, потому что ваш новый Canvas c никому не назначен. Это все равно что создать строку myString для журнала, но никогда не использовать Log.d(tag, myString)

edit (после прочтения всех комментариев)

Если вы вычислили значение в вашем onCreate () и хотите отобразить это значение в вашем onDraw (), это просто сделайте это. Сохраните результат в переменной-члене, и вы можете получить к нему доступ в onDraw ().

В противном случае: укажите полный код. Я думаю, вы просто делаете это более сложным, чем это должно быть ...

edit2

Ваш код немного запутан и делает много вещей в тех областях, где вы не должны этого делать. Таким образом, рисование внутри onProgressUpdate() серьезно неправильно. Вы должны инкапсулировать свой расчет и чертеж.

Что вы должны сделать (во всяком случае, я рекомендую использовать SurfaceView вместо View ...):

Вы должны запустить AsynchTask, который обновляет строку, которую вы хотите нарисовать. Строка должна быть переменной внутри вашего View, где вы используете ее для рисования. Сам рисунок должен вызываться потоком рисования (я помню: используйте SurfaceView вместо View в качестве родительского класса). Внутри этого onDraw () вы должны просто использовать свой объект рисования, заданный холст и строку, которую хотите нарисовать (не забудьте сделать переменную paint также переменной-членом, чтобы предотвратить повторное создание одного и того же объекта снова и снова для производительность / память).

Если вы не знаете, как работать с SurfaceView, или если вы хотите узнать, как вы можете работать с потоком рисунков, пожалуйста, прочитайте мое руководство по рисованию 2D: www.droidnova.com/2d-tutorial-series

Короткое последнее предложение: вы сделали много вещей правильно, вы просто перепутали с местами, где вы делаете это. Вы должны попытаться переосмыслить то, чего вы действительно хотите достичь, и как это можно сделать самым простым способом. Может быть, мой урок поможет немного очистить ваш разум.

...