看图:

比较简陋,主要是通过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. CentOS学习笔记--MySQL安装

    MySQL安装 Linux中使用最广泛的数据库就是MySQL,使用在线yum的方式安装的版本落后MySQL网站好几个小版本,本节亲自测试安装新版的MySQL. 测试机器环境: VMware Works ...

  2. 安装zabbix

    安装zabbix 1. 准备好lamp架构(安装好mysql,php) 2.在数据库中授权: MariaDB [(none)]> create database zabbix charset u ...

  3. MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份]

    MariaDB之基于Percona Xtrabackup备份大数据库[完整备份与增量备份] 1.Xtrabackup的安装 percona-xtrabackup-2.2.3-4982.el6.x86_ ...

  4. JqueryMobile动态生成listView并实现刷新的两种方法

    本篇文章主要是对JqueryMobile动态生成listView并实现刷新的两种方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 JqueryMobile动态生成listView并实现刷新 ...

  5. IBM开发者 JSON 教程

    在异步应用程序中发送和接收信息时,可以选择以纯文本和 XML 作为数据格式.掌握 Ajax 的这一期讨论另一种有用的数据格式 JavaScript Object Notation(JSON),以及如何 ...

  6. IOS学习2

    1. #import,#include 和@class的区别 都引用一个类,根本定义区别:#include ,#import会把所有的copy一份到该文件 #import比#include的优势,im ...

  7. js控制文本框只能输入数字 及 常用字符对应ASCII码值

    方法一: <INPUT TYPE='text' NAME=text onkeypress="a()"><script language=javascript> ...

  8. python 关于 ImportError: No module named 的问题

    转载自:http://my.oschina.net/leejun2005/blog/109679 今天在 centos 下安装 python setup.py install 时报错:ImportEr ...

  9. 使用supervisor的一些注意事项

    一直都有在使用supervisor来管理linux上的服务进程.最近有同事说有某服务貌似有问题,让上去检查一下.上去以后发现某服务反应的确很慢,所以就用supervisor重启一下.但是重启的时候就发 ...

  10. 窗体皮肤实现 - 在VC中简单实现绘制(五)

    到第四部分Delphi XE3的代码能基本完成窗体界面的绘制.窗口中的其他控件的处理方法也是相同的,截获消息处理消息. 问题这个编译出来的个头可不小.Release版本竟然2.43M,完全是个胖子.系 ...