android 自定义折线图
看图:

比较简陋,主要是通过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"));
android 自定义折线图的更多相关文章
- Android自定义折线图
老师布置了个作业:http://www.cnblogs.com/qingxu/p/5316897.html 作业中提到的 “玩了几天以后,大家发现了一些很有意思的现象,比如黄金点在逐渐地往下移动.” ...
- 使用achartengine实现自定义折线图 ----附代码 调试OK
achartengine作为android开发中最常用的实现图标的开源框架,使用比较方便,参考官方文档谢了如下Demo,实现了自定义折线图. package edu.ustb.chart; impor ...
- android绘画折线图二
紧接着android绘画折线图一,下面来介绍第二种方法,使用该方法,首先需要一个Androidplot-core-0.4.3-release.jar,该jar包之后也包含在项目源码中 建立一个andr ...
- android绘画折线图一
最近需要实现用android来画折线图,所以百度了一下,发现确实很多,也很乱,现在整理两种方法(第二种方法在[android绘画折线图二]中实现),仅供大家参考,一起学习研究. 第一种使用ChartF ...
- Android自定义控件-折线图
好长时间没有更新博客了,终于可以抽出时间写点东西了,写点什么呢?最近在qq群里边有人问,下边的这个控件怎么画?如下图所示:图可以左右拖动,直到显示完全为止.刚开始看到这个效果图,我也想了一下总共分为以 ...
- echarts自定义折线图横坐标时间间隔踩坑总结
折线图需求:横坐标为时间,要求按一定间隔展示,鼠标移至折线上间隔时间内的数据也可展示 其实很简单的一个配置就可搞定,但在不熟悉echarts配置的情况下,就很懵逼 xAxis: { boundaryG ...
- Android自定义视图三:给自定义视图添加“流畅”的动画
这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! Android自定义视图一:扩展现有的视图,添加新的XML属性 Android自定义视图二:如何绘制内容 Android自定义视图三: ...
- iOS 动画绘制线条颜色渐变的折线图
效果图 .................... 概述 现状 折线图的应用比较广泛,为了增强用户体验,很多应用中都嵌入了折线图.折线图可以更加直观的表示数据的变化.网络上有很多绘制折线图的demo,有 ...
- Android 自定义View -- 简约的折线图
转载请注明出处:http://write.blog.csdn.net/postedit/50434634 接上篇 Android 圆形百分比(进度条) 自定义view 昨天分手了,不开心,来练练自定义 ...
随机推荐
- Hive[4] 数据定义 HiveQL
HiveQL 是 Hive 查询语言,它不完全遵守任一种 ANSI SQL 标准的修订版,但它与 MySQL 最接近,但还有显著的差异,Hive 不支持行级插入,更新和删除的操作,也不支持事务,但 H ...
- Change Homepage Logo
Open the following defination and changed them. 1. NEW_PS_LOGO (Image Type) - To change the logo.2. ...
- 常见的HTTP错误总结
一般来说HTTP2XX,代表请求正常完成,HTTP3XX代表网站重定向,HTTP4XX,代表客户端出现错误,HTTP5XX,代服务器端出现了错误 HTTP301:请求的数据具有新的位置 HTTP302 ...
- sqoop导出工具
sqoop的导出工具是把HDFS上文件中的数据导出到mysql中 mysql中的表 现在在linux上创建一个文件,并把这个文件上传到hdfs上 cat person.txt ,no7, ,no8, ...
- YARN内存使用优化配置
在Hadoop2.0中, YARN负责管理MapReduce中的资源(内存, CPU等)并且将其打包成Container. 这样可以精简MapReduce, 使之专注于其擅长的数据处理任务, 将无需考 ...
- Spring中Quartz调度器的使用
一.Quartz的特点 * 按作业类的继承方式来分,主要有以下两种: 1.作业类继承org.springframework.scheduling.quartz.QuartzJobBean类的方式 2. ...
- mysql忘记root密码拯救方法(flush privileges)
修改的用户都以root为列.一.拥有原来的myql的root的密码: 方法一:在mysql系统外,使用mysqladmin# mysqladmin -u root -p password " ...
- iOS反射机制
iOS属性反射:说白了,就是将两个对象的所有属性,用动态的方式取出来,并根据属性名,自动绑值.(注意:对象的类,如果是派生类,就得靠其他方式来实现了,因为得到不该基类的属性.) 本人常用的反射方式,有 ...
- 18.python的异常处理
python中至少包括两种错误:语法错误(syntax errors)和异常(exceptions). 1.语法错误 语法错误,也被称作解析错误
- JavaWeb之Servlet: ServletConfig 与 ServletContext
ServletConfig对象 什么是ServletConfig对象 ServletConfig对象,叫Servlet配置对象.主要用于加载配置文件的初始化参数. 创建时机 ServletConfig ...