看图:

比较简陋,主要是通过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();//刷新界面
}
@Override
protected 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);
}
@Override
public 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自定义折线图

    老师布置了个作业:http://www.cnblogs.com/qingxu/p/5316897.html 作业中提到的 “玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动.” ...

  2. 使用achartengine实现自定义折线图 ----附代码 调试OK

    achartengine作为android开发中最常用的实现图标的开源框架,使用比较方便,参考官方文档谢了如下Demo,实现了自定义折线图. package edu.ustb.chart; impor ...

  3. android绘画折线图二

    紧接着android绘画折线图一,下面来介绍第二种方法,使用该方法,首先需要一个Androidplot-core-0.4.3-release.jar,该jar包之后也包含在项目源码中 建立一个andr ...

  4. android绘画折线图一

    最近需要实现用android来画折线图,所以百度了一下,发现确实很多,也很乱,现在整理两种方法(第二种方法在[android绘画折线图二]中实现),仅供大家参考,一起学习研究. 第一种使用ChartF ...

  5. Android自定义控件-折线图

    好长时间没有更新博客了,终于可以抽出时间写点东西了,写点什么呢?最近在qq群里边有人问,下边的这个控件怎么画?如下图所示:图可以左右拖动,直到显示完全为止.刚开始看到这个效果图,我也想了一下总共分为以 ...

  6. echarts自定义折线图横坐标时间间隔踩坑总结

    折线图需求:横坐标为时间,要求按一定间隔展示,鼠标移至折线上间隔时间内的数据也可展示 其实很简单的一个配置就可搞定,但在不熟悉echarts配置的情况下,就很懵逼 xAxis: { boundaryG ...

  7. Android自定义视图三:给自定义视图添加“流畅”的动画

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...

  8. iOS 动画绘制线条颜色渐变的折线图

    效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...

  9. Android 自定义View -- 简约的折线图

    转载请注明出处:http://write.blog.csdn.net/postedit/50434634 接上篇 Android 圆形百分比(进度条) 自定义view 昨天分手了,不开心,来练练自定义 ...

随机推荐

  1. dnw-linux的安装及使用

    <Tiny6410刷机指南>介绍了如何用USB线下载uboot,kernel,filesystem到开发板的nand flash,USB下载文件用到工具dnw.遗憾的是该教程提供的是win ...

  2. ADO .NET 链接 增删改查

    ADO.NET: 数据访问技术 就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中也可以将数据库中的数据提取到内存中供程序调用 所有数据访问技术的基础 连 ...

  3. arguments .length .callee caller

    如果有一个函数像下面这样: function fn(){ } 那么fn这个函数下面就有一个arguments属性(你在逗我么,后面又说对象),该属性是个对象(typeof一下就知道了),然后它下面也有 ...

  4. Linux rabbitmq的安装和安装amqp的php插件

    RabbitMQ是一个消息代理.它的核心原理非常简单:接收和发送消息.你可以把它想像成一个邮局:你把信件放入邮箱,邮递员就会把信件投递到你的收件人处.在这个比喻中,RabbitMQ是一个邮箱.邮局.邮 ...

  5. char引发的血案

    char cc = 'j';cc = (char)(cc -32); //注意下,自动转型了System.out.println(cc);

  6. html中的框架

    1.总的代码 <frameset rows=20%,*> <frame src="top.html" /> <frameset cols=30%,*& ...

  7. Python初学者笔记(4)-简单的通讯录

    要求: 编写一个简单的通讯录 1.通讯录包含至少包含姓名.电话号码.电子邮箱:2.通讯录的信息能够保存在本地磁盘:3.通讯录查找特定人员的信息:4.通讯录能够修改特定人员的信息:5.通讯录能够删除特定 ...

  8. [terry笔记]更改oracle用户名

    更改oracle的用户名 之前有个需求,整理一个schema的表.索引等规划到一个表空间里,利用expdp/impdp然后remap就完成了,但是整理好的用户名remap变更了,应用又不想修改其连接信 ...

  9. Python学习教程(learning Python)--2.3 Python自定义函数传参函数设计

    Python里自定义子函数时,可以在调用时携带一些参数到子函数里去处理.具体用法结构如下: def func(arguments): statement statement etc. 定义子函数一定要 ...

  10. java路径问题总结

    平时写程序的时候,很多时候提示文件找不到,而抛出了异常,现在整理如下[一 相对路径的获得] 说明:相对路径(即不写明时候到底相对谁)均可通过以下方式获得(不论是一般的java项目还是web项目) St ...