看图:

比较简陋,主要是通过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. 使用SE16N_INTERFACE

    调用函数直接修改table数据             在PRD上通常没有权限 但是可以激活sap内置的修改模式     SE16N 修改表数据.增加.删除行项目: 1. Execute tcode ...

  2. windows phone主题切换(换肤)

    之前项目做了个主题切换的功能,最后客户没来得及出第二套界面给放弃了,默哀中... 为了不让它就这样流产了,就放博客共享吧. 首先说明下原理:这个切换是通过重写资源字典里指定的样式,在运行的过程中加载指 ...

  3. jquery click & get value of attributes of a href

    http://stackoverflow.com/questions/6625667/jquery-click-get-value-of-attributes-of-a-href /* Add a l ...

  4. kettle的job

    1.首先创建一个job 2.拖拽组件形成下面的图 这里需要注意,在作业中的连线分为三类: 黄色锁的线:这个步骤执行之后,无论失败与否都会执行下一个步骤 绿色对号线:步骤执行成功了,才会执行下一个步骤. ...

  5. PHP mysql 事务处理实例

    事务是必须满足4个条件(ACID):原子性(Autmic).一致性(Consistency).隔离性(Isolation).持久性(Durability) 原子性(Autmic):事务在执行性,要做到 ...

  6. [Linux]Nginx + Node.js + PM2 + MongoDb + (Memcached) Part I

    运行环境: 在本地的VirtualBox下运行的Ubuntu 14.04 LTS  0. 查看一下Server的IP地址 ifconfig 我的Server IP是192.168.0.108 1. 安 ...

  7. ubuntu 下安装极点五笔

    安装完Ubuntu后先更新软件,我的Ubuntu的键盘输入方式系统是ibus 在终端中执行如下操作 sudo wget http://www.unicom-china.com/download/vis ...

  8. js8月-4号,,思想

    1.js使用观察者模式,做异步编程.面向事件编程. 2.事件执行 (1)用户触发事件(2)定时执行 作业:选项卡,导航栏.

  9. Python脚本控制的WebDriver 常用操作 <十> 层级定位

    下面将使用WebDriver来模拟操作一个层级定位元素的操作 测试用例场景 在实际的项目测试中,经常会有这样的需求:页面上有很多个属性基本相同的元素,现在需要具体定位到其中的一个.由于属性基本相当,所 ...

  10. SQL语句基础之 单表查找

    Sql语句之 单表查询 一.一般查询 1.查看表中的所有记录 以及 所有字段(属性) 语句 : select * from student; 2.只查看某些字段 语句:select sname,sex ...