在自己的开发中遇到一个画曲线的需求,就自己尝试画了一下,可能有点杂乱,欢迎提出改进建议
package zhichi.chartmaster; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.LinearGradient; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Shader; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import java.util.ArrayList; import java.util.List; /** * Created by Administrator on 2017/2/15. */ public class LineChartView extends CharterBase { private onSelectClick onSelectClick; public void setOnSelectClick(onSelectClick onSelectClick) { this.onSelectClick = onSelectClick; } private int xo;//圆点x坐标 private int yo;//圆点y坐标 private int topBound;//上边界的高度 private int firstX;//第一个点x坐标 private int minSlideX;//在移动时,第一个点允许最小的x坐标 private int maxSlideX;//在移动时,第一个点允许允许最大的x坐标 private int interval;//坐标间的间隔 float startX=0;//滑动时候,上一次手指的x坐标 //单位文字 private String unitText=""; public String getUnitText() { return unitText; } public void setUnitText(String unitText) { this.unitText = unitText; } //是否有阴影 private boolean IsShadow=false; //控件宽度 private int width; //控件高度 private int height; //X轴刻度数 private int XScaleNumber=8; //虚线的画笔 private Paint effectPaint; //日期的画笔 private Paint datePaint; //日期线的宽度 private float dateLineWith=dipToPx(0.6f); //日期背景的颜色 private int dateLineColor = Color.parseColor("#f2f2f2"); //折线颜色 private int baseLineColor; //折线路径 private Path baseLinePath; //折线画笔 private Paint baseLinePaint; //折线的宽度 private float baseLineWith = dipToPx(0.8f); //折线下的阴影的画笔 private Paint baseShadow; //圆圈点的画笔 private Paint circlePaint; //折线的弯曲率 private float smoothness=0.35f; //坐标点的集合 private List<PointF> points=new ArrayList<>(); //选中的坐标点 private int selectPoint = -1; //文字的画笔 private Paint textPaint; //文字的大小 private float textSize=dipToPx(12); //文字的颜色 private int textColor= Color.parseColor("#666666"); //背景颜色 private int bg=Color.parseColor("#fa6049"); public int getSelectPoint() { return selectPoint; } public void setSelectPoint(int selectPoint) { this.selectPoint = selectPoint; invalidate(); } public int getXScaleNumber() { return XScaleNumber; } public void setXScaleNumber(int XScaleNumber) { this.XScaleNumber = XScaleNumber