andriod散点图简单实现
来源:互联网 发布:淘宝网下载安装2017 编辑:程序博客网 时间:2024/05/17 04:15
效果图:
代码实现:
import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.view.View;import java.util.List;public class ScatterView extends View { private int axisColor;// 轴线颜色 private float axisWith; // 轴线宽度 private int[] dotColor; // 数据点颜色 private int[] dotWidth; // 数据点大小 private int textColor; // 文本颜色 private int textSize; // 文本字体 private int leftMargins; // 左边距 private int rightMargins; // 右边距 private int bottomMargins; // 下边距 private int topMargins; // 上边距 private float XScale; // X的刻度长度 private int xLength; // X轴的长度 private int xMax; // X轴最大值 private int YScale; // Y的刻度长度 private int yLength; // Y轴的长度 private int yMax; // Y轴最大值 private List<int[]> yData; // y轴数据 private List<int[]> xData;// x轴数据 private boolean hasYAxis; // 显示Y轴轴线 private boolean hasXAxis; // 显示X轴轴线 private boolean hasYScale; // 显示Y轴刻度 private boolean hasXScale; // 显示X轴刻度 private boolean showData;// 显示数据值 private Paint axisPaint, textPaint, dotPaint; private int[] colors = new int[]{Color.BLUE, Color.CYAN, Color.RED, Color.GREEN, Color.YELLOW}; private int[] dotType = new int[]{ 1, 2 }; // 数据点类型 //构造函数 public ScatterView(Context context, List<int []> yData, List<int []> xData){ super(context); setData(yData, xData); setDotColor(colors); } protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawColor(Color.WHITE); if (null!= yData && null!= xData) { init(); initPaint(); axisDraw(canvas); Draw(canvas); } } //绘制散点图 private void Draw(Canvas canvas){ int len = yData.size(); for (int j = 0; j < len; j++){ int []y = yData.get(j); int []x = xData.get(j); dotPaint.setColor(getDotColor()[j]); if ( j % 2 == 0) dotPaint.setStyle(Paint.Style.FILL); else dotPaint.setStyle(Paint.Style.STROKE); for (int i = 0; i < y.length; i ++) { canvas.drawCircle(XCoord(x[i]), YCoord(y[i]), 5, dotPaint); } } } //绘制坐标系 private void axisDraw(Canvas canvas){ if (isHasYAxis()) { canvas.drawLine(leftMargins, topMargins + yLength, leftMargins,topMargins, axisPaint); } if (isHasXAxis()) { canvas.drawLine(leftMargins, topMargins + yLength, xLength + leftMargins, topMargins + yLength, axisPaint); } for (int i = 0; i <= 5; i ++){ if (i < 5) canvas.drawLine(leftMargins - 5, i * yLength / 5f + topMargins, xLength + leftMargins, i * yLength / 5f + topMargins, axisPaint); canvas.drawText(String.valueOf(yMax * (5 - i ) / 5), leftMargins - 20, i * yLength / 5f + topMargins + 5, textPaint); } for (int i = 0; i <= 3; i ++){ if (i > 0) canvas.drawLine(leftMargins + i * xLength / 3f, topMargins, leftMargins + i * xLength / 3f, topMargins + yLength +5, axisPaint); canvas.drawText(String.valueOf(xMax * i / 3), leftMargins + i * xLength / 3f, topMargins + yLength + 25, textPaint); } } private void init(){ //初始化绘图范围 setLeftMargins(50); setRightMargins(50); setTopMargins(50); setBottomMargins(50); yLength = getHeight() - bottomMargins - topMargins; xLength = getWidth() - leftMargins - rightMargins; xMax = getMax(xData); yMax = getMax(yData); //初始化轴显示 setHasXAxis(true); setHasYAxis(true); setHasXScale(true); setHasYData(true); //初始化轴线画笔 axisPaint = new Paint(); axisPaint.setStyle(Paint.Style.STROKE); axisPaint.setAntiAlias(true); axisPaint.setColor(Color.GRAY); axisPaint.setStrokeWidth(1); //初始化数据点画笔 dotPaint = new Paint(); dotPaint.setStyle(Paint.Style.STROKE); dotPaint.setAntiAlias(true); dotPaint.setColor(Color.BLACK); //初始化文本画笔 textPaint = new Paint(); textPaint.setStyle(Paint.Style.STROKE); textPaint.setAntiAlias(true); textPaint.setColor(Color.BLACK); textPaint.setTextSize(11); textPaint.setTextAlign(Paint.Align.RIGHT); } //设置画笔 private void initPaint() { if (getAxisColor() != 0) axisPaint.setColor(getAxisColor()); if (getAxisWidth() != 0) axisPaint.setStrokeWidth(getAxisWidth()); if (getTextColor() != 0) textPaint.setColor(getTextColor()); if (getTextSize() != 0) textPaint.setTextSize(getTextSize()); } //定位 private int YCoord(int y){ return (int) (yLength + topMargins - y * (yLength / (float) yMax)); } private int XCoord(int x){ return (int) (leftMargins + x * (xLength / (float) xMax)); } //获取图例最大值 private int getMax(List<int []> data){ int max = 0; for (int j = 0; j< data.size(); j++) { int id = 0; int[] temp = data.get(j); for (int i = 1; i < temp.length; i++){ if (temp[i] > temp[id]) id = i; } if (temp [id] > max) max = temp[id]; } int i=0; while (max > 10){ max /= 10; i ++; } return (int) ((max + 1) * Math.pow(10, i)); } //数据设置 public int getYData(int i, int j) { return yData.get(i)[j]; } public int getXData(int i, int j) { return xData.get(i)[j]; } public void setData(List<int[]> yData,List<int[]> xData) { this.yData = yData; this.xData = xData; } //轴线设置 public int getAxisColor() { return axisColor; } public void setAxisolor(int axisColor) { this.axisColor = axisColor; } public float getAxisWidth() { return axisWith; } public void setAxisWidth(int axisWith) { this.axisWith = axisWith; } //数据点设置 public void setDotColor(int[] dotColor) { this.dotColor = dotColor; } public int[] getDotColor() { return dotColor; } public void setDotStyle(int i) { switch (dotColor[i]){ case 1: dotPaint.setStyle(Paint.Style.FILL); break; case 2: dotPaint.setStyle(Paint.Style.STROKE); break; } } //X轴设置 public boolean isHasXAxis() { return hasXAxis; } public void setHasXAxis(boolean hasXAxis) { this.hasXAxis = hasXAxis; } public float getXScale() { return XScale; } public void setXScale(float xScale) { XScale = xScale; } public int getXLength() { return xLength; } public void setXLength(int xLength) { this.xLength = xLength; } public boolean isHasXScale() { return hasXScale; } public void setHasXScale(boolean hasXScale) { this.hasXScale = hasXScale; } //Y轴设置 public boolean isHasYAxis() { return hasYAxis; } public void setHasYAxis(boolean hasYAxis) { this.hasYAxis = hasYAxis; } public int getYScale() { return YScale; } public void setYScale(int yScale) { YScale = yScale; } public int getYLength() { return yLength; } public void setYLength(int yLength) { this.yLength = yLength; } public boolean isHasYScale() { return hasYScale; } public void setHasYData(boolean hasYScale) { this.hasYScale = hasYScale; } //文本设置 public int getTextSize() { return textSize; } public void setTextSize(int textSize) { this.textSize = textSize; } public int getTextColor() { return textColor; } public void setTextColor(int textColor) { this.textColor = textColor; } //边距设置 public int getLeftMargins() { return leftMargins; } public void setLeftMargins(int leftMargins) { this.leftMargins = leftMargins; } public int getRightMargins() { return rightMargins; } public void setRightMargins(int rightMargins) { this.rightMargins = rightMargins; } public int getBottomMargins() { return bottomMargins; } public void setBottomMargins(int buttomMargins) { this.bottomMargins = buttomMargins; } public int getTopMargins() { return topMargins; } public void setTopMargins(int topMargins) { this.topMargins = topMargins; }}
0 0
- andriod散点图简单实现
- andriod柱形图简单实现
- andriod折线图简单实现
- andriod饼图简单实现
- andriod面积图简单实现
- Andriod雷达图简单实现
- andriod饼图(3d)简单实现
- andriod——简单实现二级购物车
- Andriod简单实用mediaPlayer
- Andriod Supoort库实现andriod程序向下兼容
- andriod实现省略号
- andriod的push实现
- Andriod Sensor HAL实现
- Andriod Sensor HAL实现
- Andriod Sensor HAL实现
- Andriod实现卫星菜单
- Andriod 简单工程目录介绍
- Andriod应用破解越发简单
- SQL Server 2005安装时出现IIS功能要求警告的解决方法
- springmvc rest风格的实例代码demo讲解
- 仙剑带给我们的感动里不仅仅是一个个跌宕起伏
- mongo dos导入js数据文件
- 新浪微博成功登陆纳斯达克
- andriod散点图简单实现
- Java学习记录(2)
- 如何在Eclipse下查看JDK源代码
- mysql 高级之权限-用户权限
- MySQL中连接字符串函数
- 关于编程的计划初定
- Mac OX 10.7 VMware的安装
- Oracle笔记——常见报错处理方法
- ActivityManager: Warning: Activity not started, its current task has been brought to the front