package com.qozix.mapview.paths; import java.util.List; import android.content.Context; import android.graphics.Canvas; import android.graphics.CornerPathEffect; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.Point; import android.view.View; public class PathView extends View { private static final int DEFAULT_COLOR = 0xBB489FFF; private Paint paint = new Paint(); private Path originalPath = new Path(); private Path drawingPath = new Path(); private double scale = 1; public PathView( Context context ) { super( context ); setWillNotDraw( false ); paint.setStyle( Paint.Style.STROKE ); paint.setAntiAlias( true ); paint.setColor( DEFAULT_COLOR ); paint.setStrokeWidth( 7 ); paint.setShadowLayer( 4, 2, 2, 0x66000000 ); paint.setPathEffect( new CornerPathEffect( 5 ) ); } public void setColor( int c ) { paint.setColor( c ); invalidate(); } public void setCornerRadii( float r ) { paint.setPathEffect( new CornerPathEffect( r ) ); invalidate(); } public void setShadowLayer(float radius, float dx, float dy, int color){ paint.setShadowLayer( radius, dx, dy, color ); } public void setStrokeWidth( float w ){ paint.setStrokeWidth( w ); } public double getScale() { return scale; } public Paint getPaint(){ return paint; } public void setScale( double s ) { float factor = (float) s; Matrix matrix = new Matrix(); drawingPath.set( originalPath ); matrix.setScale( factor, factor ); originalPath.transform( matrix, drawingPath ); scale = s; invalidate(); } public void drawPath( List<Point> points ) { Point start = points.get( 0 ); originalPath.reset(); originalPath.moveTo( (float) start.x, (float) start.y ); int l = points.size(); for ( int i = 1; i < l; i++ ) { Point p = points.get( i ); originalPath.lineTo( (float) p.x, (float) p.y ); } drawingPath.set( originalPath ); invalidate(); } @Override public void onDraw( Canvas canvas ) { canvas.drawPath( drawingPath, paint ); super.onDraw( canvas ); } }