Frage

Ich habe das Kind von Relatelayout erstellt. In seinem Konstruktor rief ich an:

    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());
    }

Und überschreiben Sie die Methode 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);
    }

Auf der Ansicht wurde keine Zeile erschienen. Außerdem habe ich versucht, "this.draw ()" nicht zu nennen, aber nichts passierte.

Ich habe entdeckt, dass die Halbbreite und die Höhe gleich 0 sind. Warum?

PS Auch wenn ich Breite und Höhe statisch festlegt, wird sich nichts ändern. Wenn es Ihnen nichts ausmacht, schauen Sie sich diese Beispielanwendung an: Warum wird nichts gezeichnet?http://androidforums.com/attachment.php?attachmentID=21715&stc=1&d=1315232946

War es hilfreich?

Lösung 2

Ich habe eine nicht triviale Lösung gefunden. Ich habe die Ansicht durch den Konstruktor mit 1 Parameter initiert. Und dann habe ich die benutzerdefinierte Ansicht in das Layout eingefügt und aufgerufen () (), wenn ich sie brauchte.

Andere Tipps

Hast du das überschrieben? onMeasure? Hier ist meins - Sie können feststellen, dass dies ein paar Mal aufgerufen wird, während die Ansicht geladen wird, manchmal mit 0 Werten:

@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 ...
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top