安卓用canvas画曲线图
1.新建一个常变量类Constant.java
package com.rain.db;
import android.graphics.Point; public class Constant { public static Point point;//获取屏幕的大小 }
2.新建一个函数ChartView.java
package com.rain.kongjian; import com.rain.db.Constant; import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View; public class ChartView extends View{
public int XPoint=; //原点的X坐标
public int YPoint=Constant.point.y/; //原点的Y坐标
public int XScale=; //X的刻度长度
public int YScale=; //Y的刻度长度
public int XLength=Constant.point.x-; //X轴的长度
public int YLength=Constant.point.y/-; //Y轴的长度
public String[] XLabel; //X的刻度
public String[] YLabel; //Y的刻度
public String[] Data; //数据
public String Title; //显示的标题
public ChartView(Context context)
{
super(context);
}
public void SetInfo(String[] XLabels,String[] YLabels,String[] AllData,String strTitle)
{
XLabel=XLabels;
YLabel=YLabels;
Data=AllData;
Title=strTitle;
XScale=XLength/AllData.length;//实际X的刻度长度
YScale=YLength/YLabels.length;
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);//重写onDraw方法 //canvas.drawColor(Color.WHITE);//设置背景颜色
Paint paint= new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setAntiAlias(true);//去锯齿
paint.setColor(Color.BLACK);//颜色
Paint paint1=new Paint();
paint1.setStyle(Paint.Style.STROKE);
paint1.setAntiAlias(true);//去锯齿
paint1.setColor(Color.DKGRAY);
paint.setTextSize(); //设置轴文字大小
//设置Y轴
canvas.drawLine(XPoint, YPoint-YLength, XPoint, YPoint, paint); //轴线
for(int i=;i*YScale<YLength ;i++)
{
canvas.drawLine(XPoint,YPoint-i*YScale, XPoint+, YPoint-i*YScale, paint); //刻度
try
{
canvas.drawText(YLabel[i] , XPoint-, YPoint-i*YScale+, paint); //文字
}
catch(Exception e)
{
}
}
canvas.drawLine(XPoint,YPoint-YLength,XPoint-,YPoint-YLength+,paint); //箭头
canvas.drawLine(XPoint,YPoint-YLength,XPoint+,YPoint-YLength+,paint);
//设置字体的大小角度等
paint.setTextSize();
drawText(canvas,"单位:kWh", XPoint-, YPoint-YLength+YScale-, paint,-); //设置X轴
paint.setTextSize();
canvas.drawLine(XPoint,YPoint,XPoint+XLength,YPoint,paint); //轴线
for(int i=;i*XScale<XLength;i++)
{
canvas.drawLine(XPoint+i*XScale, YPoint, XPoint+i*XScale, YPoint-, paint); //刻度
try
{
// canvas.drawText(XLabel[i], XPoint + i * XScale - 10,
// YPoint + 20, paint); // 文字
drawText(canvas,XLabel[i], XPoint + i * XScale,
YPoint + , paint,-); // 文字
// 数据值
if (i > && YCoord(Data[i - ]) != -
&& YCoord(Data[i]) != -) // 保证有效数据
canvas.drawLine(XPoint + (i - ) * XScale,
YCoord(Data[i - ]), XPoint + i * XScale,
YCoord(Data[i]), paint);
canvas.drawCircle(XPoint + i * XScale, YCoord(Data[i]), ,
paint);
} catch (Exception e) {
}
}
canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-,YPoint-,paint); //箭头
canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-,YPoint+,paint);
//设置标题位置
paint.setTextSize();
canvas.drawText(Title, XLength/-, , paint);
}
//设置文字显示方向
void drawText(Canvas canvas ,String text , float x ,float y,Paint paint ,float angle){
if(angle != ){
canvas.rotate(angle, x, y);
}
canvas.drawText(text, x, y, paint);
if(angle != ){
canvas.rotate(-angle, x, y);
}
} private int YCoord(String y0) //计算绘制时的Y坐标,无数据时返回-999
{
int y;
try
{
y=Integer.parseInt(y0);
}
catch(Exception e)
{
return -; //出错则返回-999
}
try
{
return YPoint-y*YScale/Integer.parseInt(YLabel[]);
}
catch(Exception e)
{
}
return y;
}
}
3.在需要的地方调用ChartView.java,这里在nibianqi_zt.java中调用
package com.example.myfragment; import com.rain.kongjian.ChartView; import com.rain.db.Constant;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem; public class nibianqi_zt extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
//setContentView(R.layout.nibianqi_zt); /* 显示App icon左侧的back键 */
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true); Constant.point = new Point();
getWindowManager().getDefaultDisplay().getSize(Constant.point);//获取屏幕分辨率 ChartView myView=new ChartView(this);
setContentView(myView);
myView.SetInfo(new String[] { "7-11", "7-12", "7-13", "7-14", "7-15",
"7-16", "7-17" }, // X轴刻度
new String[] { "", "", "", "", "", "" }, // Y轴刻度
new String[] { "", "", "", "", "", "", "" }, // 数据
"图标的标题"); } // 顶部返回键
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
} }
效果演示如下:

安卓用canvas画曲线图的更多相关文章
- 使用javascript和canvas画月半弯
使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...
- canvas 画圈 demo
html代码: <canvas id="clickCanvas2" width="180" height="180" data-to ...
- 踩个猴尾不容易啊 Canvas画个猴子
踩个猴尾不容易啊 Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...
- canvas画随机闪烁的星星
canvas画一颗星星: 规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星. function drawStars(x,y,radius1,radius2 ...
- canvas画时钟
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- Canvas画椭圆的方法
虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生 oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...
- 深夜,用canvas画一个时钟
深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...
- 樱花的季节,教大家用canvas画出飞舞的樱花树
又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...
- HTML5之Canvas画圆形
HTML5之Canvas画圆形 1.设计源码 <!DOCTYPE html> <head> <meta charset="utf-8" /> & ...
随机推荐
- storm源码之storm代码结构【译】
storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...
- JS事件冒泡、停止冒泡、addEventListener--实例演示
问题: <div class='item' id='outer' onclick="alert('outer')"> <div class='item' id=' ...
- 解决jqplot与jquery-ui导入必要包时的冲突
解决jqplot与jquery-ui导入必要包时的冲突 对于一个网页中,即要有jqplot的画图,又要有jquery-ui的风格显示! 但在导入必要的包时,出现了问题! 先导入jqplot的必要包: ...
- JavaScript –type
JavaScript –类型之我晕 每次写博我觉得取上恬当的题目比整篇行文都难,词量有限的情况下突然想到JavaScript拾遗应该会是一个非常文艺而夺目的博文题目,但我并没有急着使用,经验告诉我应该 ...
- sql数据库的备份还原问题
sql数据库的备份还原问题 今天工作中犯了一个严重的错误,就是在sql中写了一个update语句,还没写条件呢,结果误按了F5,唉,太佩服自己啦...这个脑子怎么不管用了呢?? 唉不说了,我在网上翻来 ...
- 使用C#开发ActiveX控件
使用C#开发ActiveX控件(新) 前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动 ...
- 4605 Magic Ball Game
先离线记录所有询问,然后用dfs在线记录当前节点的所有父亲结点,父亲结点分为两类,一个从左边过来,一个从右边过来,分别开一个数组. 数据需要离散化,刚开始用lower_bound写,一直wa..,用二 ...
- [置顶] 使用Android OpenGL ES 2.0绘图之五:添加运动
传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...
- Python 入门介绍
写在前面 开始介绍Python之前, 先回顾一下编译型语言和解释型语言的概念和区别. 计算机能直接识别只能是机器语言, 所以使用高级语言编写的程序必须翻译成机器语言,计算机才能执行. 翻译的方式有两种 ...
- autotools入门笔记(二)——创建和使用静态库、动态库
带有静态库或者动态库的工程的构建过程与上一节()只包含一个源文件的工程的构建过程是类似的.只是对于复杂的工程,如果包含多个还有源文件的目录时,需要对每个包含源文件的目录执行构建过程,另外创建和使用库文 ...