2017-01-04 6 views
0

Я пытаюсь разработать приложение в android Studio, и я хочу использовать Paint и Canvas, в основном что-то рисовать, когда использую publishProgress.Краска в Android Studio в фоновом режиме

Было бы здорово, если бы кто-нибудь из вас мог сказать мне, что не так с моим кодом, и почему это ничего не рисует.

Примечание. Это все в AsyncTaskActivity классе

@Override 
    protected void doInBackground(Void... params) { 

      publishProgress(); // Run onProgressUpdate() method 
     } 

    } 

@Override 
    protected void onProgressUpdate(Void... params) { 
     // Here you can access the UI thread 
     Canvas canvas = new Canvas(); 
     Paint pa1= new Paint(); 
     pa1.setColor(Color.RED); 
     pa1.setStyle(Paint.Style.FILL); 
     pa1.setStrokeWidth(50); 

     canvas.drawLine(0, 0, 100, 100, pa1); 
    } 
+1

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

+0

Итак, я думаю, мне нужно создать новый класс с 'extends view' и попытаться вызвать' ondraw() 'из' onProgressUpdate() '. Это оно? – difegui

+1

Представление должно быть частью иерархии представлений или оно все равно не появится на экране. Итак, нет, вы не хотите создавать новое представление. Вы должны определить представление в макете своей деятельности, а затем найти представление. Поместите фактический чертеж в метод 'onDraw' вида, поскольку [@Vova предлагает] (http://stackoverflow.com/a/41469887/535871). –

ответ

2

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

https://developer.android.com/training/custom-views/custom-drawing.html

2

Холст должен нарисовать либо растрового изображения или вид. Чтобы рисовать в растровое изображение, вы можете создать пустой битмап, а затем передать его в Canvas в конструкторе. Чтобы сделать вид, вы должны создать пользовательский вид и переопределить функцию onDraw, которая будет передана Canvas.

Рисование к растровому изображению фактически не будет отображаться на экране, если только какой-либо вид не рисует это растровое изображение на его собственном холсте.