1.新建一个常变量类Constant.java

  1. package com.rain.db;
  2. import android.graphics.Point;
  3.  
  4. public class Constant {
  5.  
  6. public static Point point;//获取屏幕的大小
  7.  
  8. }

  

2.新建一个函数ChartView.java

  1. package com.rain.kongjian;
  2.  
  3. import com.rain.db.Constant;
  4.  
  5. import android.content.Context;
  6. import android.graphics.Canvas;
  7. import android.graphics.Color;
  8. import android.graphics.Paint;
  9. import android.view.View;
  10.  
  11. public class ChartView extends View{
  12. public int XPoint=; //原点的X坐标
  13. public int YPoint=Constant.point.y/; //原点的Y坐标
  14. public int XScale=; //X的刻度长度
  15. public int YScale=; //Y的刻度长度
  16. public int XLength=Constant.point.x-; //X轴的长度
  17. public int YLength=Constant.point.y/-; //Y轴的长度
  18. public String[] XLabel; //X的刻度
  19. public String[] YLabel; //Y的刻度
  20. public String[] Data; //数据
  21. public String Title; //显示的标题
  22. public ChartView(Context context)
  23. {
  24. super(context);
  25. }
  26. public void SetInfo(String[] XLabels,String[] YLabels,String[] AllData,String strTitle)
  27. {
  28. XLabel=XLabels;
  29. YLabel=YLabels;
  30. Data=AllData;
  31. Title=strTitle;
  32. XScale=XLength/AllData.length;//实际X的刻度长度
  33. YScale=YLength/YLabels.length;
  34. }
  35. @Override
  36. protected void onDraw(Canvas canvas){
  37. super.onDraw(canvas);//重写onDraw方法
  38.  
  39. //canvas.drawColor(Color.WHITE);//设置背景颜色
  40. Paint paint= new Paint();
  41. paint.setStyle(Paint.Style.STROKE);
  42. paint.setAntiAlias(true);//去锯齿
  43. paint.setColor(Color.BLACK);//颜色
  44. Paint paint1=new Paint();
  45. paint1.setStyle(Paint.Style.STROKE);
  46. paint1.setAntiAlias(true);//去锯齿
  47. paint1.setColor(Color.DKGRAY);
  48. paint.setTextSize(); //设置轴文字大小
  49. //设置Y轴
  50. canvas.drawLine(XPoint, YPoint-YLength, XPoint, YPoint, paint); //轴线
  51. for(int i=;i*YScale<YLength ;i++)
  52. {
  53. canvas.drawLine(XPoint,YPoint-i*YScale, XPoint+, YPoint-i*YScale, paint); //刻度
  54. try
  55. {
  56. canvas.drawText(YLabel[i] , XPoint-, YPoint-i*YScale+, paint); //文字
  57. }
  58. catch(Exception e)
  59. {
  60. }
  61. }
  62. canvas.drawLine(XPoint,YPoint-YLength,XPoint-,YPoint-YLength+,paint); //箭头
  63. canvas.drawLine(XPoint,YPoint-YLength,XPoint+,YPoint-YLength+,paint);
  64. //设置字体的大小角度等
  65. paint.setTextSize();
  66. drawText(canvas,"单位:kWh", XPoint-, YPoint-YLength+YScale-, paint,-);
  67.  
  68. //设置X轴
  69. paint.setTextSize();
  70. canvas.drawLine(XPoint,YPoint,XPoint+XLength,YPoint,paint); //轴线
  71. for(int i=;i*XScale<XLength;i++)
  72. {
  73. canvas.drawLine(XPoint+i*XScale, YPoint, XPoint+i*XScale, YPoint-, paint); //刻度
  74. try
  75. {
  76. // canvas.drawText(XLabel[i], XPoint + i * XScale - 10,
  77. // YPoint + 20, paint); // 文字
  78. drawText(canvas,XLabel[i], XPoint + i * XScale,
  79. YPoint + , paint,-); // 文字
  80. // 数据值
  81. if (i > && YCoord(Data[i - ]) != -
  82. && YCoord(Data[i]) != -) // 保证有效数据
  83. canvas.drawLine(XPoint + (i - ) * XScale,
  84. YCoord(Data[i - ]), XPoint + i * XScale,
  85. YCoord(Data[i]), paint);
  86. canvas.drawCircle(XPoint + i * XScale, YCoord(Data[i]), ,
  87. paint);
  88. } catch (Exception e) {
  89. }
  90. }
  91. canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-,YPoint-,paint); //箭头
  92. canvas.drawLine(XPoint+XLength,YPoint,XPoint+XLength-,YPoint+,paint);
  93. //设置标题位置
  94. paint.setTextSize();
  95. canvas.drawText(Title, XLength/-, , paint);
  96. }
  97. //设置文字显示方向
  98. void drawText(Canvas canvas ,String text , float x ,float y,Paint paint ,float angle){
  99. if(angle != ){
  100. canvas.rotate(angle, x, y);
  101. }
  102. canvas.drawText(text, x, y, paint);
  103. if(angle != ){
  104. canvas.rotate(-angle, x, y);
  105. }
  106. }
  107.  
  108. private int YCoord(String y0) //计算绘制时的Y坐标,无数据时返回-999
  109. {
  110. int y;
  111. try
  112. {
  113. y=Integer.parseInt(y0);
  114. }
  115. catch(Exception e)
  116. {
  117. return -; //出错则返回-999
  118. }
  119. try
  120. {
  121. return YPoint-y*YScale/Integer.parseInt(YLabel[]);
  122. }
  123. catch(Exception e)
  124. {
  125. }
  126. return y;
  127. }
  128. }

3.在需要的地方调用ChartView.java,这里在nibianqi_zt.java中调用

  1. package com.example.myfragment;
  2.  
  3. import com.rain.kongjian.ChartView;
  4.  
  5. import com.rain.db.Constant;
  1. import android.app.ActionBar;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.view.MenuItem;
  5.  
  6. public class nibianqi_zt extends Activity {
  7.  
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. //setContentView(R.layout.nibianqi_zt);
  13.  
  14. /* 显示App icon左侧的back键 */
  15. ActionBar actionBar = getActionBar();
  16. actionBar.setDisplayHomeAsUpEnabled(true);
  17.  
  18.      Constant.point = new Point();
         getWindowManager().getDefaultDisplay().getSize(Constant.point);//获取屏幕分辨率
  19.  
  20. ChartView myView=new ChartView(this);
  21. setContentView(myView);
  22. myView.SetInfo(new String[] { "7-11", "7-12", "7-13", "7-14", "7-15",
  23. "7-16", "7-17" }, // X轴刻度
  24. new String[] { "", "", "", "", "", "" }, // Y轴刻度
  25. new String[] { "", "", "", "", "", "", "" }, // 数据
  26. "图标的标题");
  27.  
  28. }
  29.  
  30. // 顶部返回键
  31. @Override
  32. public boolean onOptionsItemSelected(MenuItem item) {
  33. switch (item.getItemId()) {
  34. case android.R.id.home:
  35. finish();
  36. return true;
  37. default:
  38. return super.onOptionsItemSelected(item);
  39. }
  40. }
  41.  
  42. }

效果演示如下:

安卓用canvas画曲线图的更多相关文章

  1. 使用javascript和canvas画月半弯

    使用javascript和canvas画月半弯,月半弯好浪漫!浏览器须支持html5 查看效果:http://keleyi.com/a/bjad/8xqdm0r2.htm 以下是代码: <!do ...

  2. canvas 画圈 demo

    html代码: <canvas id="clickCanvas2"  width="180" height="180" data-to ...

  3. 踩个猴尾不容易啊 Canvas画个猴子

    踩个猴尾不容易啊  Canvas画个猴子 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&qu ...

  4. canvas画随机闪烁的星星

    canvas画一颗星星: 规则的星星有内切圆和外切圆,每两个点之间的角度是固定的,因此可得到星星的每个点的坐标,画出星星. function drawStars(x,y,radius1,radius2 ...

  5. canvas画时钟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  6. Canvas画椭圆的方法

    虽然标题是画椭圆,但是我们先来说说Canvas中的圆 相信大家对于Canvas画圆都不陌生   oGC.arc(400, 300, 100, 0, 2*Math.PI, false); 如上所示,直接 ...

  7. 深夜,用canvas画一个时钟

    深夜,用canvas画一个时钟 查看demo 这几天准备阿里巴巴的笔试,可以说已经是心力交瘁,自从阿里和蘑菇街的内推被刷掉之后,开始越来越怀疑起自己的能力来,虽然这点打击应该是微不足道的.毕竟校招在刚 ...

  8. 樱花的季节,教大家用canvas画出飞舞的樱花树

    又到了樱花的季节,教大家使用canvas画出飞舞的樱花树效果. 废话少说,先看效果. 演示效果地址:http://suohb.com/work/tree4.htm 查看演示效果 第一步,我们先画出一棵 ...

  9. HTML5之Canvas画圆形

    HTML5之Canvas画圆形 1.设计源码 <!DOCTYPE html> <head> <meta charset="utf-8" /> & ...

随机推荐

  1. IOS学习之路十四(用TableView做的新闻客户端展示页面)

    最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...

  2. AppBox_v3.0

    AppBox_v2.0完整版免费下载,暨AppBox_v3.0正式发布! AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. Ap ...

  3. WampServer Mysql配置

    WAMP:Windows下的Apache+Mysql+Perl/PHP/Python,一组常用来搭建动态网站或者服务器的开源软件.可点击此处下载WampServer,然后,按照提示安装WAMP.需要说 ...

  4. Power BI移动端应用

    随笔- 420  文章- 6  评论- 1927  无处不在的商业智能---Power BI移动端应用   此篇来自于微软商业智能网站的官方博客团队发布的Power BI在线资料其中的一部分,完整版地 ...

  5. appfog java jdbc mysql连接

    本来用得好好的openshift被墙了,无奈只能找过一个免费的空间.同学推荐appfog,appfog的确是一个很好用的空间,支持几乎所有主流的技术.我自己喜欢写点java,刚好我就开始使用了.app ...

  6. hdu 1671 Phone List(字典树)

    知道bug的时候我眼泪掉下来... 我的第一道字典树,看了字典树的注意事项和实现方式,我写这道题的时候格外认真,就是奔着1A去的.结果这是几A来着? 第一遍写的时候提交MLA,我看了一下,是因为我释放 ...

  7. 根据字节码探讨java自增运算符的原理

    public class Test { static int x, y; public static void main(String args[]) { x++; myMethod(); Syste ...

  8. Mac下Android studio搭建Android开发环境【新手】

    上学期用的还是windows,这学期新入手了mac,突然也想装个Android studio来玩玩.安装过程中出现了问题,记录如下. 先是装安卓studio的下载链接,不推荐去官网装,这里提供一个挺好 ...

  9. ESLint--定制你的代码规则

    简介 ESLint是一个开源的项目,由Nicholas C. Zakas(<JavaScript高级程序设计>作者)于2013年六月创建.它的目标是为JavaScript提供一个完全可配置 ...

  10. 关于ASP.NET WebAPI中HTTP模型的相关思考

    对于.NET的分布式应用开发,可以供我们选择的技术和框架比较多,例如webservice,.net remoting,MSMQ,WCF等等技术.对于这些技术很多人都不会陌生,即时没有深入的了解,但是肯 ...