看图:

比较简陋,主要是通过canvas画上去的:

package com.example.democurvegraph.view;import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup.LayoutParams;/*** 自定义局部折线图* @author feijian* @time 2015年6月29日15:37:41*/
public class CurveView extends View{ArrayList<Float> listData;int mHeight,mWidth;private int default_circle_radius = 4;private int selected_circle_radius = 8;private int padding = 8;private int widthEMS = 0;  //两个相邻描点之间的距离
//    private float avg = 0;// listData里面数组的平均值private float maxValue = 0;//最大的值private int lineColor=0; //线条的颜色private int circleColor=0; //圆圈的颜色private float pre_X = 0,pre_Y = 0;public CurveView(Context context) {super(context);}public CurveView(Context context, AttributeSet attrs) {super(context, attrs);}public CurveView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}/*** 自定义初始化画图数据* @param listData* @param lineColor* @param circleColor*/public void DrawData(ArrayList<Float> listData,int lineColor,int circleColor){this.listData = listData;LayoutParams llparam = this.getLayoutParams();mHeight = llparam.height;mWidth = llparam.width;if(listData!=null){for(int i=0;i<listData.size();i++){if(this.maxValue < listData.get(i)){this.maxValue = listData.get(i);}}}this.lineColor = lineColor;this.circleColor = circleColor;this.widthEMS = (mWidth-padding*2)/listData.size();System.out.print("widthEMS="+widthEMS+";mWidth="+mWidth+";paddingLeft="+padding+";size="+listData.size()+";mHeight="+mHeight);invalidate();//刷新界面
    }@Overrideprotected void onDraw(Canvas canvas) {System.out.println("onDraw init");if(listData!=null){System.out.println("onDraw");Paint circlePaint = new Paint();circlePaint.setColor(circleColor);Paint linePaint = new Paint();linePaint.setColor(lineColor);for(int i=0;i<listData.size();i++){if(pre_X==0 && pre_Y==0)  //说明开始画第一个圈圈
                {pre_X=padding;pre_Y = (mHeight - listData.get(i)*mHeight / maxValue);}System.out.println("pre_X="+pre_X+";pre_Y="+pre_Y);if(i > 0)  //这时需要画前一个线段
                {canvas.drawLine(pre_X, pre_Y, pre_X+widthEMS, mHeight - listData.get(i)*mHeight / maxValue, linePaint);pre_X = pre_X+widthEMS;pre_Y = mHeight - listData.get(i)*mHeight / maxValue;}canvas.drawCircle(pre_X, pre_Y, default_circle_radius, circlePaint);}}super.onDraw(canvas);}@Overridepublic boolean onTouchEvent(MotionEvent event) {// 获取点击屏幕时的点的坐标  float x = event.getX();  float y = event.getY(); System.out.println("x="+x+";y="+y+",event.getAction()"+event.getAction());return super.onTouchEvent(event);}
}

使用方法:

curveView = (CurveView) findViewById(R.id.v_curve);LayoutParams llparams = curveView.getLayoutParams();llparams.height = 140;llparams.width = 400;ArrayList<Float> listData = new ArrayList<Float>();listData.add(1f);listData.add(2f);listData.add(3f);listData.add(2f);listData.add(5f);listData.add(1f);listData.add(4f);curveView.DrawData(listData,Color.parseColor("#ffffff"),Color.parseColor("#ffffff"));

demo下载

android 自定义折线图相关推荐

  1. Android 自定义折线图实现教程

    前言: 各位同学大家好,有段时间没有给大家更新文章了,具体多久我也记不清楚了.最近重新复习了一下原生安卓的知识点,写了一个安卓原生自定义折线图的效果,就想着分享给大家.希望帮助到各位学习和工作,那份废 ...

  2. 新手如何画出自定义View(Android——自定义折线图)

    在正式开始之前 我还是打算先说几句废话: 1.本文章是让初学者画自定义View所以不会对代码进行过多的解释 2.为什么不用现有强大的图表框架 列如:Android HelloChart 或者 MPAn ...

  3. android自定义折线图可左右滑动,25.Android自定义折线图,可左右滑动

    前言 最近项目需要折线图,自己就手画了一个,主要是锻炼下自己的自定义控件技术.控件没有实现惯性滑动,希望知道的朋友指教下. 效果图 hehe.gif 直接上代码 public class MyLine ...

  4. Android自定义折线图,可设置基准线,不同点颜色

    最近项目中需要用到折线图,发现了一款比较好用的折线图hellocharts,做了炫酷的动画以及折线图,柱状图,混合图都有涉及到,非常的棒,在此推荐一下. 但是使用过程中碰到这样的需求: ①:不同数据点 ...

  5. android自定义曲线控件,Android自定义折线图(可拖动显示)

    废话不多说先上图咯 图一 至于怎么做呢 咱们可以先获取下折线图数据分析一波 { "code": 200, "message": "", &q ...

  6. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、自定义数据点的形状、自定义折线图的颜色

    Python使用matplotlib函数subplot可视化多个不同颜色的折线图.自定义数据点的形状.自定义折线图的颜色 目录

  7. pyqt5,Qchart画折线图,设定多个不同刻度的Y轴,修改自定义折线图的坐标轴,改变折线图的底色

    就是这些自己遇到的需求: 如有不对,请大佬不吝赐教. Qchart设定多个不同刻度的Y轴 修改自定义折线图的坐标轴 改变折线图的底色,底色透明 鼠标悬停事件 import datetime impor ...

  8. native react 折线图_【详解】纯 React Native 代码自定义折线图组件(译)

    本文为 Marno 翻译,转载必须保留出处! 公众号[ Marno ],关注后回复 RN 加入交流群 React Native 优秀开源项目大全:http://www.marno.cn 一.前言 在移 ...

  9. android自定义波浪图,Android自定义控件--波浪图控件

    今天给大家分享一个android的波浪图控件制作.具体效果如下图所示: 上次有个app使用了这个控件,感觉特别酷炫.今天讲解一下这个控件的思路分析与代码编写. 思路分析: 1.绘制波浪图 2.移动波浪 ...

最新文章

  1. mysql bin.000047_解决mysql-bin.000001占用超大空间的问题
  2. Adaboost算法原理分析与实例
  3. CRT exCRT模板
  4. php limit限流,php+redis 限流
  5. qt中QListView的用法和QModelIndex的使用
  6. JVM 运行时数据区域总结
  7. kibana 查看索引库中文档个数_百度索引量是什么意思?和百度收录量的区别。...
  8. 应用高斯分布来解决异常检测问题(一)
  9. get方式传递参数问题解决经验
  10. 处理在SBS2003上安装WSUS失败的情况
  11. 知道如何防止域名被封,干货!赶紧收藏
  12. EPICS -- areaDetector URL驱动程序
  13. MATLAB【数字图像处理】 实验五:形态学图像处理
  14. powerdesigner错误提示实体属性名称唯一性_WPS导致加载DLL错误的解决方案
  15. 摹客导入html,导入摹客RP
  16. 1259: [蓝桥杯2015初赛]三羊献瑞 C/C++
  17. 再见,Java 8!Java 17 发布,堪称史上最快的 JDK
  18. 2019年中国金融信息化软件开发企业排名
  19. 第四章 道德经第四章原文 道德经第四章译文
  20. python程序设计第七章答案_MOOC课程答案第七章单元测试答案_Python语言程序设计答案免费微信公众号...

热门文章

  1. python applymap_Python pandas.DataFrame.applymap函数方法的使用
  2. excel最常用的八个函数_Excel中最常用的快捷键
  3. 基于STC8G8K64U三通道高速ADC采集板
  4. python对输入的字符串进行解析_python数据类型_字符串常用操作(详解)
  5. java maven 开发环境_Maven 搭建开发环境
  6. mysql连接池失效_连接池隔天失效之异常处理
  7. Linux怎么互相ping通,主机+虚拟机Ubuntu+开发板互相ping通
  8. cmw500综合测试仪使用_大屏幕真彩色互感器综合特性测试仪功能特点
  9. (一)硕博生常用的中文文献检索方式推荐
  10. Verilog中的逻辑运算符与按位运算符的区分