Android: текст не виден при записи с помощью drawText ()

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

}
  • 0
    Откуда ты знаешь, что это не работает?
  • 0
    Если я изменю последнюю строку на canvas.drawText («HELLO CANVAS», 200,300, paint); Оно работает. Но я хотел бы знать, почему выше не работает. Не работает в том смысле, что не печатает никаких символов на экране !!!
Показать ещё 6 комментариев
Теги:
canvas
graphics

1 ответ

4
Лучший ответ

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

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

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

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

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

edit2

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

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

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

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

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

  • 0
    Обновил код! Сначала я вызываю onDraw () для рисования графических объектов на экране. Затем после этого я пытаюсь делать вычисления непрерывно (отсюда и асинхронная активность) и продолжаю отображать результат.
  • 0
    @ m4n07 отредактировал мой ответ
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню