Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Draw dash line on a Canvas

Tags:

How can i draw dash line on a canvas. I already tried this:

Paint dashPaint = new Paint(); dashPaint.setARGB(255, 0, 0, 0); dashPaint.setStyle(Paint.Style.STROKE); dashPaint.setPathEffect(new DashPathEffect(new float[]{5, 10, 15, 20}, 0)); canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint); 

And it gave me not dash line but a simple one.

like image 492
Procurares Avatar asked May 13 '13 18:05

Procurares


People also ask

How do you make a dashed line in canvas?

To draw a dotted line in the HTML Canvas with JavaScript, we can use the setLineDash or mozDash method. to create the canvas. Then we call setLineDash or mozDash to set the line style to a dashed line.

How do you draw a line on a canvas?

To draw a line on a canvas, you use the following steps: First, create a new line by calling the beginPath() method. Second, move the drawing cursor to the point (x,y) without drawing a line by calling the moveTo(x, y) . Finally, draw a line from the previous point to the point (x,y) by calling the lineTo(x,y) method.

How do I draw a dotted line in canvas android?

setARGB(255, 0, 0, 0); dashPaint. setStyle(Paint. Style. STROKE); dashPaint.

What is used to draw lines on the canvas?

For drawing straight lines, use the lineTo() method. Draws a line from the current drawing position to the position specified by x and y . This method takes two arguments, x and y , which are the coordinates of the line's end point.


1 Answers

You are drawing a line, as per documentation, drawLine function will:

Draw a line segment with the specified start and stop x,y coordinates, using the specified paint.

Note that since a line is always "framed", the Style is ignored in the paint.

Degenerate lines (length is 0) will not be drawn.

 canvas.drawLine(0, canvas.getHeight() / 2, canvas.getWidth(), canvas.getHeight() / 2, dashPaint)  

To draw a dashed line, a suggestion is to use the Path primitive

       private Path    mPath;        mPath = new Path();        mPath.moveTo(0, h / 2);        mPath.quadTo(w/2, h/2, w, h/2);         // h and w are height and width of the screen          Paint mPaint = new Paint();        mPaint.setARGB(255, 0, 0, 0);        mPaint.setStyle(Paint.Style.STROKE);        mPaint.setPathEffect(new DashPathEffect(new float[]{5, 10, 15, 20}, 0)); 

In onDraw()

       canvas.drawPath(mPath, mPaint);  

Snap shot

enter image description here

I have background and dashed line drew over it.

Example

public class FingerPaintActivity extends Activity {     MyView mv;      @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         mv = new MyView(this);         setContentView(mv);         mPaint = new Paint();         mPaint.setAntiAlias(true);         mPaint.setDither(true);         mPaint.setColor(0xFFFF0000);         mPaint.setARGB(255, 0, 0, 0);         mPaint.setStyle(Paint.Style.STROKE);         mPaint.setPathEffect(new DashPathEffect(new float[]{10, 40,}, 0));         mPaint.setStrokeWidth(12);     }      private Paint mPaint;      public class MyView extends View {         private Bitmap mBitmap;         private Canvas mCanvas;         private Path mPath;         private Paint mBitmapPaint;         Context context;          public MyView(Context c) {             super(c);             context = c;             mPath = new Path();             mBitmapPaint = new Paint(Paint.DITHER_FLAG);         }          @Override         protected void onSizeChanged(int w, int h, int oldw, int oldh) {             super.onSizeChanged(w, h, oldw, oldh);             mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);             mCanvas = new Canvas(mBitmap);             mPath.moveTo(0, h / 2);             mPath.quadTo(w / 2, h / 2, w, h / 2);         }          @Override         protected void onDraw(Canvas canvas) {             super.onDraw(canvas);             canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);             canvas.drawPath(mPath, mPaint);         }     } } 

Modify the above according to your needs.

like image 186
Raghunandan Avatar answered Sep 22 '22 14:09

Raghunandan