Note that there are some explanatory texts on larger screens.

plurals
  1. POHow are you supposed to use a ShapeDrawable with a PathShape to draw a line on a custom View?
    text
    copied!<p>I am attempting to draw a line in a custom <code>View</code>. Here I've created a simple <code>Path</code> with just a single segment, created a <code>PathShape</code> from that, and finally stuck that into a <code>ShapeDrawable</code> with the intention of using that to draw on the <code>Canvas</code> inside <code>onDraw()</code>. However, this does not work. See my example, here.</p> <pre><code>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); } } </code></pre> <p>As you can see from my comments in the <code>onDraw()</code> method, neither using the <code>PathShape</code> nor the <code>ShapeDrawable</code> to draw the <code>Path</code> onto the <code>Canvas</code> actually works. Nothing is drawn when I try. Does anyone have any idea why?</p> <p>The device I'm testing this on is running Android 4.1.1.</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload