package com.marshalchen.common.uimodule.tileView.tileview.paths; import android.content.Context; import android.graphics.*; import com.marshalchen.common.uimodule.tileView.layouts.StaticLayout; import com.marshalchen.common.uimodule.tileView.tileview.detail.DetailManager; import java.util.ArrayList; import java.util.List; public class PathManager extends StaticLayout { private static final int DEFAULT_STROKE_COLOR = 0x883399FF; private static final int DEFAULT_STROKE_WIDTH = 8; private boolean shouldDraw = true; private Paint defaultPaint = new Paint(); { defaultPaint.setStyle(Paint.Style.STROKE); defaultPaint.setColor(DEFAULT_STROKE_COLOR); defaultPaint.setStrokeWidth(DEFAULT_STROKE_WIDTH); defaultPaint.setAntiAlias(true); } private DetailManager detailManager; private Path drawingPath = new Path(); private Matrix matrix = new Matrix(); private ArrayList<DrawablePath> paths = new ArrayList<DrawablePath>(); public PathManager(Context context, DetailManager dm) { super(context); setWillNotDraw(false); detailManager = dm; } public Paint getPaint() { return defaultPaint; } public Path getPathFromPoints(List<Point> points) { Path path = new Path(); Point start = points.get(0); path.moveTo((float) start.x, (float) start.y); int l = points.size(); for (int i = 1; i < l; i++) { Point point = points.get(i); path.lineTo((float) point.x, (float) point.y); } return path; } public DrawablePath addPath(List<Point> points) { return addPath(points, defaultPaint); } public DrawablePath addPath(List<Point> points, Paint paint) { Path path = new Path(); Point start = points.get(0); path.moveTo((float) start.x, (float) start.y); int l = points.size(); for (int i = 1; i < l; i++) { Point point = points.get(i); path.lineTo((float) point.x, (float) point.y); } return addPath(path, paint); } public DrawablePath addPath(Path path, Paint paint) { DrawablePath drawablePath = new DrawablePath(); drawablePath.path = path; drawablePath.paint = paint; return addPath(drawablePath); } public DrawablePath addPath(Path path) { return addPath(path, defaultPaint); } public DrawablePath addPath(DrawablePath drawablePath) { paths.add(drawablePath); invalidate(); return drawablePath; } public void removePath(DrawablePath path) { paths.remove(path); invalidate(); } public void clear() { paths.clear(); invalidate(); } public void setShouldDraw(boolean should) { shouldDraw = should; invalidate(); } @Override public void onDraw(Canvas canvas) { if (shouldDraw) { float scale = (float) detailManager.getScale(); matrix.setScale(scale, scale); for (DrawablePath drawablePath : paths) { drawingPath.set(drawablePath.path); drawingPath.transform(matrix); // defer drawing to the path object drawablePath.draw(canvas, drawingPath); } } super.onDraw(canvas); } }