Wie soll ein ShapeDrawable mit einer PathShape verwendet werden, um eine Linie in einer benutzerdefinierten Ansicht zu zeichnen?

Ich versuche, eine Linie in einer Gewohnheit zu zeichnenView. Hier habe ich ein einfaches erstelltPath mit nur einem einzigen Segment erstellt aPathShape aus, und steckte das schließlich in eineShapeDrawable mit der Absicht, das zu nutzen, um auf dieCanvas InnerhalbonDraw(). Dies funktioniert jedoch nicht. Siehe mein Beispiel hier.

package com.example.test;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.PathShape;
import android.util.Log;
import android.view.View;

public class TestView extends View {

    private Path mPath = null;
    private Paint mPaint = null;
    private PathShape mPathShape = null;
    private ShapeDrawable mShapeDrawable = null;

    public TestView(Context context) {
        super(context);
    }

    private void init() {
        int width = this.getWidth() / 2;
        int height = this.getHeight() / 2;

        Log.d("init", String.format("width: %d; height: %d", width, height));

        this.mPath = new Path();
        this.mPath.moveTo(0, 0);
        this.mPath.lineTo(width, height);

        this.mPaint = new Paint();
        this.mPaint.setColor(Color.RED);

        this.mPathShape = new PathShape(this.mPath, 1, 1);

        this.mShapeDrawable = new ShapeDrawable(this.mPathShape);
        this.mShapeDrawable.getPaint().set(this.mPaint);
        this.mShapeDrawable.setBounds(0, 0, width, height);
    }

    @Override
    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
        super.onLayout(changed, left, top, right, bottom);

        // Doing this here because in the constructor we don't have the width and height of the view, yet
        this.init();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Log.d("onDraw", "Drawing");

        // This works, but won't let me do what I'm really trying to do
        canvas.drawLine(0.0f, 0.0f, this.getWidth() / 2.0f, this.getHeight() / 2.0f, this.mPaint);

        // This should work, but does not
        //this.mPathShape.draw(canvas, this.mPaint);

        // This should work, but does not
        //this.mShapeDrawable.draw(canvas);
    }

}

Wie Sie aus meinen Kommentaren im Internet ersehen könnenonDraw() Methode, weder mit derPathShape noch dieShapeDrawable zeichnen diePath auf dieCanvas funktioniert tatsächlich. Wenn ich es versuche, wird nichts gezeichnet. Hat jemand eine Idee warum?

Auf dem Gerät, auf dem ich dies teste, wird Android 4.1.1 ausgeführt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage