Android: il disegno sulla tela e Vista (senza bitmap)
-
25-10-2019 - |
Domanda
ho creato il figlio di RelativeLayout. Nel suo costruttore ho chiamato:
public CanvasHolder(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
layoutInflater.inflate(R.layout.canvas_holder, this);
this.draw(new Canvas());
}
E poi metodo di sostituzione OnDraw ():
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
black.setARGB(255, 0, 0, 0);
black.setAntiAlias(true);
int halfWidth = this.getWidth() / 2;
int height = this.getHeight();
canvas.drawLine(0, 0, halfWidth, height, black);
}
è stato apparso Nessuna linea sulla vista. Inoltre, ho cercato di non chiamata "This.Draw ()", ma non è successo niente.
ho scoperto che metà larghezza e l'altezza è uguale a 0. Perché?
P.S. anche se ho impostato la larghezza e l'altezza in modo statico, non cambierà nulla. Se non ti dispiace, date un'occhiata su questa applicazione di esempio: perché nulla è tratto? http://androidforums.com/attachment.php?attachmentid=21715&stc=1&d=1315232946
Soluzione 2
ho trovato la soluzione non banale. Ho Inited la vista dal costruttore con 1 parametro. E poi ho inserito la visualizzazione personalizzata nel layout e denominato invalidate () quando ne avevo bisogno.
Altri suggerimenti
Lo si sovrascrive il onMeasure
? Qui è la mia - è possibile che questo viene chiamato un paio di volte mentre la vista è carico, a volte con 0 valori:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
if (parentHeight > 0) {
this.setMeasuredDimension(parentWidth, parentHeight);
// ... other stuff ...
}
}