/ / Android графика извън метода onDraw - андроид, графика, android-canvas

Android графики извън метода onDraw - Android, графики и Android платно

Добре, така че аз се опитвам да привлечем към платното от Android извън метода onDraw.

Просто е най-лесно да се покаже кодът ми:

public class TestActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Paint p = new Paint();
p.setColor(Color.GREEN);
Panel a = new Panel(this,150,150,50,p);
a.drawThing();
setContentView(a);

}
class Panel extends View{
private float radius, x, y;
private Canvas CAN;
private Paint p;
public Panel(Context context, float x, float y, float radius, Paint p){
super(context);
this.x = x;
this.y = y;
this.radius = radius;
this.p = p;

}
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
CAN = canvas;

}

public void drawThing(){
CAN.drawCircle(x, y, radius, p);
}
}
}

Виждате ли какво се опитвам да направя? Но по някаква причина тя хвърля NullPointerException

Отговори:

4 за отговор № 1

Много от графичните ресурси са изрично освободени / освободени след като са били използвани. Не съм съвсем сигурен защо правят това, но каквато и да е причината, те не правят това, което се опитвате.

Вместо да рисувате извън метода onDraw, използвайте някакъв флаг, за да промените това, което прави методът onDraw. Когато искате да нарисувате нещо специфично, можете да зададете правилния флаг и да се обадите invalidate().

@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
if (doThing) {
canvas.drawCircle(x, y, radius, p);
}
}

РЕДАКТИРАНЕ
Нещо друго, което трябва да се помисли, е привличането към иизточник на "off-scrren". Това означава да използвате някакъв вид графично представяне като растерно изображение като буфер, който можете да нарисувате в друг код. Това няма да актуализира вашия графичен интерфейс, но ще ви даде възможност да направите някои тежки чертежи, без да блокирате устройството на потребителя. След като приключите с рисуването към растерното изображение (или каквото и да е друго), можете да анулирате изгледа си и да го изтеглите на екрана в onDraw(Canvas) метод.


1 за отговор № 2

Аз съм сигурен, че нулевият указател се случва, защото вие наричате drawSomething преди onDraw да бъде извикан. Така че може да е нула.


0 за отговор № 3

Можете да рисувате върху платно извън onDraw. Виж това Можем ли да имаме две платна в една дейност? (ИЛИ) Да имаш платно извън onDraw () не работи за повече информация.