安卓静态坐标及折线图实现
来源:互联网 发布:whatsapp软件官方下载 编辑:程序博客网 时间:2024/05/15 00:30
MYViewActivity代码如下import android.annotation.SuppressLint; import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.DashPathEffect;import android.graphics.Paint;import android.graphics.Path;import android.graphics.PathEffect;import android.util.Log;import android.view.View;@SuppressLint("DrawAllocation")public class MyView extends View {// 默认边距private int Margin = 40;// 原点坐标private int Xpoint;private int Ypoint;// X,Y轴的单位长度private int Xscale = 20;private int Yscale = 20;// X,Y轴上面的显示文字private String[] Xlabel = { "0", "1", "2", "3", "4", "5", "6", "7", "8" };private String[] Ylabel = { "0", "1", "2", "3", "4", "5", "6", "7", "8","9", "10" };// 标题文本private String Title;// 曲线数据private int[] Data = {1, 2, 4, 6, 4, 8, 1, 7, 9 };public MyView(Context context, String[] xlabel, String[] ylabel,String title, int[] data) {super(context);this.Xlabel = xlabel;this.Ylabel = ylabel;this.Title = title;this.Data = data;}public MyView(Context context) {super(context);}// 初始化数据值public void init() {Xpoint = this.Margin;Ypoint = this.getHeight() - this.Margin;Xscale = (this.getWidth() - 2 * this.Margin) / (this.Xlabel.length - 1);Yscale = (this.getHeight() - 2 * this.Margin)/ (this.Ylabel.length - 1);}public int getMargin() {return Margin;}public void setMargin(int margin) {Margin = margin;}@Overrideprotected void onDraw(Canvas canvas) {canvas.drawColor(Color.BLACK);Paint p1 = new Paint();p1.setStyle(Paint.Style.STROKE);p1.setAntiAlias(true);p1.setColor(Color.WHITE);p1.setStrokeWidth(2);init();this.drawXLine(canvas, p1);this.drawYLine(canvas, p1);this.drawTable(canvas);this.drawData(canvas);}// 画表格private void drawTable(Canvas canvas) {Paint paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setColor(Color.GRAY);Path path = new Path();PathEffect effects = new DashPathEffect(new float[] { 5, 5, 5, 5 }, 1);paint.setPathEffect(effects);// 纵向线for (int i = 1; i * Xscale <= (this.getWidth() - this.Margin); i++) {int startX = Xpoint + i * Xscale;int startY = Ypoint;int stopY = Ypoint - (this.Ylabel.length - 1) * Yscale;path.moveTo(startX, startY);path.lineTo(startX, stopY);canvas.drawPath(path, paint);}// 横向线for (int i = 1; (Ypoint - i * Yscale) >= this.Margin; i++) {int startX = Xpoint;int startY = Ypoint - i * Yscale;int stopX = Xpoint + (this.Xlabel.length - 1) * Xscale;path.moveTo(startX, startY);path.lineTo(stopX, startY);paint.setColor(Color.DKGRAY);canvas.drawPath(path, paint);paint.setColor(Color.WHITE);paint.setTextSize(this.Margin / 2);canvas.drawText(this.Ylabel[i], this.Margin / 4, startY+ this.Margin / 4, paint);}}// 画横纵轴private void drawXLine(Canvas canvas, Paint p) {canvas.drawLine(Xpoint, Ypoint, this.Margin, this.Margin, p);canvas.drawLine(Xpoint, this.Margin, Xpoint - Xpoint / 3, this.Margin+ this.Margin / 3, p);canvas.drawLine(Xpoint, this.Margin, Xpoint + Xpoint / 3, this.Margin+ this.Margin / 3, p);}private void drawYLine(Canvas canvas, Paint p) {canvas.drawLine(Xpoint, Ypoint, this.getWidth() - this.Margin, Ypoint,p);canvas.drawLine(this.getWidth() - this.Margin, Ypoint, this.getWidth()- this.Margin - this.Margin / 3, Ypoint - this.Margin / 3, p);canvas.drawLine(this.getWidth() - this.Margin, Ypoint, this.getWidth()- this.Margin - this.Margin / 3, Ypoint + this.Margin / 3, p);}// 画数据private void drawData(Canvas canvas) {Paint p = new Paint();p.setAntiAlias(true);p.setColor(Color.WHITE);p.setTextSize(this.Margin / 2);// 纵向线for (int i = 1; i * Xscale <= (this.getWidth() - this.Margin); i++) {int startX = Xpoint + i * Xscale;canvas.drawText(this.Xlabel[i], startX - this.Margin / 4,this.getHeight() - this.Margin / 4, p);canvas.drawCircle(startX, calY(Data[i]), 4, p);canvas.drawLine(Xpoint+(i-1)*Xscale, calY(Data[i-1]), startX, calY(Data[i]), p);}}/** * * @param y * @return */private int calY(int y){ int y0 = 0 ;int y1 = 0 ;//Log.i("zzzz", "y:"+y);try{y0 = Integer.parseInt(Ylabel[0]);//Log.i("zzzz", "y0"+y0);y1 = Integer.parseInt(Ylabel[1]);//Log.i("zzzz","y1"+y1);}catch(Exception e){//Log.i("zzzz", "string changed is err");return 0;}try{//Log.i("zzzz", "返回数据"+(Ypoint-(y-y0)*Yscale/(y1-y0)) );return Ypoint-((y-y0)*Yscale/(y1-y0)) ;}catch(Exception e){//Log.i("zzzz", "return is err");return 0;}}}
阅读全文
0 0
- 安卓静态坐标及折线图实现
- 安卓折线图折线图charts
- 安卓自定义View实现简单折线图
- 安卓动态折线图
- 安卓定位及坐标转换
- 安卓报表MPAndroidChart之折线图
- 安卓开发中的折线图
- 安卓自定义控件之折线图
- 一个安卓折线图控件
- 安卓 画折线
- highchart静态折线图
- 使用achartengine 实现简单静态、动态折线图
- Jfreechart中文API及画双Y坐标的折线图
- flex 折线图的双坐标
- 折线图hellocharts-android库修改坐标、空心原点的实现
- 安卓(android)统计图表の曲线图,折线图
- 安卓图表引擎AChartEngine嵌入Acitivity中的折线图
- 安卓图表引擎AChartEngine示例源码折线图
- centos7 安装mysql
- Android-DiskLruCache源码解析
- 两种方法实现MFC 对话框最大化时控件也随比例最大化或者还原
- 6TCP四次握手断开连接(图解)
- 我涨姿势了 -- 原来所谓的一天工作8小时是这样定义的
- 安卓静态坐标及折线图实现
- OSG学习:矩阵变换节点示例
- 【Shawn-Server】Wordpress博客服务器搭建
- shell脚本练习(进度条......)
- PAT甲级 1015
- TCP 和 Udp 区别
- STM32CUBEMX相关
- n个数组成最大、最小整数
- leetcode500