package com.znv.linkup.view; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.DashPathEffect; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.PathEffect; import android.graphics.Point; import android.view.Display; import android.view.View; import android.view.animation.AlphaAnimation; import com.znv.linkup.R; import com.znv.linkup.core.card.Piece; import com.znv.linkup.view.animation.HideAnimation; /** * 消除路径 * * @author yzb * */ public class PathView extends View { public PathView(Activity linkup) { this((Context) linkup); // 根据屏幕分辨率设置path宽度 Display mDisplay = linkup.getWindowManager().getDefaultDisplay(); Point size = new Point(); mDisplay.getSize(size); pathWidth = size.x / 60; paint.setStrokeWidth(pathWidth); PathEffect effect = new DashPathEffect(new float[] { pathWidth, pathWidth }, 0); paint.setPathEffect(effect); } public PathView(Context context) { super(context); paint.setStyle(Style.STROKE); paint.setStrokeWidth(pathWidth); paint.setColor(getResources().getColor(R.color.path_color)); PathEffect effect = new DashPathEffect(new float[] { pathWidth, pathWidth }, 0); paint.setPathEffect(effect); alphaAnim.setDuration(500); HideAnimation hideAnim = new HideAnimation(this); alphaAnim.setAnimationListener(hideAnim); setVisibility(View.GONE); } /** * 显示消除路径 * * @param pieces * 路径卡片集合 */ public void showLines(List<Piece> pieces) { if (pieces == null || pieces.size() < 2) { return; } points = new ArrayList<Point>(); for (Piece p : pieces) { points.add(p.getCenter()); } setVisibility(View.VISIBLE); invalidate(); startAnimation(alphaAnim); } /** * 绘制路径 */ protected void onDraw(Canvas canvas) { if (points == null || points.size() < 2) { return; } path.reset(); Point p = points.get(0); path.moveTo(p.x, p.y); for (int i = 1; i < points.size(); i++) { path.lineTo(points.get(i).x, points.get(i).y); } canvas.drawPath(path, paint); super.onDraw(canvas); } private List<Point> points = null; private final Paint paint = new Paint(); private final Path path = new Path(); private int pathWidth = 5; private final AlphaAnimation alphaAnim = new AlphaAnimation(1, 0); }