早上第二大节有课,所以没有来得及仔细看这个例子,中午回来将这个例子写完了,现在柱状图有两个实现的方式了,一个是之前博客提到的,一个就是现在这个。

这个柱状图也实现了动态的增长,和点击显示相应柱状图的数值。

整个Pedometer(计步器)的源码已经上传到github上,感兴趣的朋友,可以下载下来看看(记得给小弟的github打个星星哦~)

github下载

CSDN下载

然后这个例子的demo在:

http://download.csdn.net/detail/a296777513/8325327

先给出效果图吧

HistogramView的代码如下:

package com.style.histogram;import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.Paint.Align;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.Transformation;/***  这是自己写的一个继承view的柱状图形*  Author: 李垭超  email:296777513@qq.com *  Date: 2015-1-4 Time: 下午2:39*/
public class HistogramView extends View {private Paint xLinePaint;// 坐标轴 轴线 画笔:private Paint hLinePaint;// 坐标轴水平内部 虚线画笔private Paint titlePaint;// 绘制文本的画笔private Paint paint;// 矩形画笔 柱状图的样式信息private int[] progress;// 7 条private int[] aniProgress;// 实现动画的值private final int TRUE = 1;// 在柱状图上显示数字private int[] text;//是否显示相应条形图的数字private String[] ySteps;  // 坐标轴左侧的数标private String[] xWeeks; // 坐标轴底部的星期数private HistogramAnimation ani;public HistogramView(Context context) {super(context);init(context, null);}public HistogramView(Context context, AttributeSet attrs) {super(context, attrs);// TODO Auto-generated constructor stubinit(context, attrs);}private void init(Context context, AttributeSet attrs) {ySteps = new String[] { "10k", "7.5k", "5k", "2.5k", "0" };xWeeks = new String[] { "周一", "周二", "周三", "周四", "周五", "周六", "周日" };text = new int[] { 0, 0, 0, 0, 0, 0, 0 };aniProgress = new int[] { 0, 0, 0, 0, 0, 0, 0 };ani = new HistogramAnimation();ani.setDuration(1000);xLinePaint = new Paint();hLinePaint = new Paint();titlePaint = new Paint();paint = new Paint();xLinePaint.setColor(Color.DKGRAY);hLinePaint.setColor(Color.LTGRAY);titlePaint.setColor(Color.BLACK);}public void setText(int[] text) {this.text = text;this.postInvalidate();// 可以子线程 更新视图的方法调用。}public void setProgress(int[] progress) {this.progress = progress;// this.invalidate(); //失效的意思。// this.postInvalidate(); // 可以子线程 更新视图的方法调用。this.startAnimation(ani);}@SuppressLint("DrawAllocation")@Overrideprotected void onDraw(Canvas canvas) {// TODO Auto-generated method stubsuper.onDraw(canvas);int width = getWidth();int height = getHeight() - 200;// 1 绘制坐标线:startX, startY, stopX, stopY, paintint startX = dip2px(getContext(), 50);int startY = dip2px(getContext(), 10);int stopX = dip2px(getContext(), 50);int stopY = dip2px(getContext(), 320);canvas.drawLine(50, 10, 50, height, xLinePaint);canvas.drawLine(50, height, width - 10, height, xLinePaint);// 2 绘制坐标内部的水平线int leftHeight = height - 20;// 左侧外周的 需要划分的高度:int hPerHeight = leftHeight / 4;// 分成四部分hLinePaint.setTextAlign(Align.CENTER);for (int i = 0; i < 4; i++) {canvas.drawLine(50, 20 + i * hPerHeight, width - 10, 20 + i* hPerHeight, hLinePaint);}// 3 绘制 Y 周坐标titlePaint.setTextAlign(Align.RIGHT);titlePaint.setTextSize(20);titlePaint.setAntiAlias(true);titlePaint.setStyle(Paint.Style.FILL);for (int i = 0; i < ySteps.length; i++) {canvas.drawText(ySteps[i], 40, 20 + i * hPerHeight, titlePaint);}// 4 绘制 X 周 做坐标int xAxisLength = width - 30;int columCount = xWeeks.length + 1;int step = xAxisLength / columCount;for (int i = 0; i < columCount - 1; i++) {// text, baseX, baseY, textPaintcanvas.drawText(xWeeks[i], 55 + step * (i + 1), height + 30,titlePaint);}// 5 绘制矩形if (aniProgress != null && aniProgress.length > 0) {for (int i = 0; i < aniProgress.length; i++) {// 循环遍历将7条柱状图形画出来int value = aniProgress[i];paint.setAntiAlias(true);// 抗锯齿效果paint.setStyle(Paint.Style.FILL);paint.setTextSize(20);// 字体大小paint.setColor(Color.parseColor("#6DCAEC"));// 字体颜色Rect rect = new Rect();// 柱状图的形状rect.left = 30 + step * (i + 1) - 30;rect.right = 30 + step * (i + 1) + 30;int rh = (int) (leftHeight - leftHeight * (value / 10000.0));rect.top = rh + 20;rect.bottom = height;Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.column);canvas.drawBitmap(bitmap, null, rect, paint);if (this.text[i] == TRUE) {canvas.drawText(value + "", 30 + step * (i + 1) - 30,rh + 10, paint);}}}}public static int dip2px(Context context, float dipValue) {final float scale = context.getResources().getDisplayMetrics().density;return (int) (dipValue * scale + 0.5f);}/*** 集成animation的一个动画类* * @author 李垭超**/private class HistogramAnimation extends Animation {@Overrideprotected void applyTransformation(float interpolatedTime,Transformation t) {super.applyTransformation(interpolatedTime, t);if (interpolatedTime < 1.0f) {for (int i = 0; i < aniProgress.length; i++) {aniProgress[i] = (int) (progress[i] * interpolatedTime);}} else {for (int i = 0; i < aniProgress.length; i++) {aniProgress[i] = progress[i];}}postInvalidate();}}}

测试类MainActivity的代码如下

package com.style.histogram;import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;@SuppressLint("ClickableViewAccessibility")
public class MainActivity extends Activity {private int[] data = new int[] { 4000, 1000, 1000, 2000, 3000, 5000, 8000 };private int[] text = new int[] { 0, 0, 0, 0, 0, 0, 0 };private HistogramView histogramView;@SuppressLint("ClickableViewAccessibility")@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_main);histogramView = (HistogramView) this.findViewById(R.id.histogram);histogramView.setProgress(data);histogramView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {int step = (v.getWidth() - 30) / 8;int x = (int) event.getX();for (int i = 0; i < 7; i++) {if (x > (30 + step * (i + 1) - 30)&& x < (30 + step * (i + 1) + 30)) {text[i] = 1;for (int j = 0; j < 7; j++) {if (i != j) {text[j] = 0;}}histogramView.setText(text);}}return false;}});}}

基于Android的计步器(Pedometer)的讲解(二)——柱状图分析2相关推荐

  1. 基于Android的计步器(Pedometer)的讲解-序

    这两个月学校的课程任务太重,又是考试,又是大作业,实在是没时间写博客,正好元旦放假,有时间就把最近做的计步器项目给大家详细讲解一番.这个讲解估计要分很多篇来讲述. 这个项目(Pedometer)已经上 ...

  2. 基于android的计步器文档,基于Android的计步器(Pedometer)的讲解(六)

    计步器(Pedometer)整个项目的源代码,最近做了比较大的修改,可能以前下载的不能运行,感兴趣的朋友可以下载来看看(记得帮小弟在github打个星~) https://github.com/296 ...

  3. 基于Android的计步器(Pedometer)的讲解(四)——后台记步

    今天先不说Pedometer(计步器)项目UI方面的了,今天讲一个基于重力加速度的记步功能传感器(Sensor),然后 在后台开启记步. 计步器(Pedometer)整个项目的源代码,感兴趣的朋友可以 ...

  4. 基于Android的计步器(Pedometer)的讲解(六)——ListView下拉刷新页面

    计步器(Pedometer)整个项目的源代码,最近做了比较大的修改,可能以前下载的不能运行,感兴趣的朋友可以下载来看看(记得帮小弟在github打个星~) https://github.com/296 ...

  5. 基于Android的便签设计(二)

    承接基于Android的便签设计(一)链接: link. 便签功能的实现 参考设计: Android开发便签APP:https://blog.csdn.net/qq_38442065/article/ ...

  6. 基于android端计步器软件的尝试

    这学期选了一门java课,然而课已经上完了还是对java一知半解,只能通过大作业来实践一下了.这次要做的是一个计步器软件,最初的目标是想实现记录步数并且显示走过路程,并能与朋友圈好友比较走过步数的功能 ...

  7. 基于Android P版本PKMS详解二

    由以上代码可知,`PKMS` 扫描了很多目录,下面列举几个重点说明: ✨ /system/framework :该目录中的文件都是系统库,例如:framework.jar.services.jar.f ...

  8. Android音视频视频基础(H264)二 SPS分析

    学习目标: SPS分析与读取 图中的标识为哥伦布编码的,均需要通过哥伦布编码解析实际值. 学习内容: 首先肯定得截个sps数据的图来看分析了. 上图红框内就是sps数据了.67是sps标识,不清楚的小 ...

  9. 基于android平台的条码扫描软件的设计与实现,基于android平台的条码扫描软件的设计与实现...

    摘要: 条码技术是随着电子计算机技术和图像编码理论不断发展进步而产生的一种自动识别技术,它以数据采集速度快,使用方便可靠,成本低等优点在各行各业的诸多领域都有应用.在工商业,仓储物流,邮政通信,交通运 ...

最新文章

  1. Confluence 6 从你的 JDBC 连接中直接启用校验查询
  2. Oracle 内置函数
  3. Android开发--Http操作介绍(二)
  4. 搭建 mysql-mmm 高可用群集
  5. 【Opencv实战】图像修复神技?看我一秒修复家里的老照片
  6. mysql怎么通过frm和ibd文件还原数据
  7. 【数字图像】数字图像处理博客汇总
  8. 华为最新开源框架mindspore学习
  9. webp 格式转 png 格式的一种便捷方式
  10. centos6.5搭建流媒体服务器
  11. 【渝粤教育】国家开放大学2018年秋季 0695-21T (1)农业企业经营管理 参考试题
  12. go语言:200行代码做udp rtp转发并发分布服务器
  13. 拓扑一致体参数化的复杂模型的等几何分析计算重用
  14. DWM 层 -- 访客 UV 计算
  15. c#推箱子小游戏代码_C# 简单推箱子游戏源码
  16. ADSL拨号工作原理
  17. OAI搭建编译eNB报错
  18. 性能诊断定位之CPU问题排查(一):win10环境1
  19. 静力触探CPT处理及表层声速异常处理记录
  20. 【源码】声明32位和64位Access、Excel等VBA兼容的API函数的方法

热门文章

  1. jQuery选择器和JS选择器
  2. 基于VUE的电商系统的设计与实现
  3. 机器学习之算法案例公共自行车使用量预测
  4. 数字角频率Ω 和 模拟角频率w
  5. 前端文章收集(长期更新)2020-02-04
  6. 红黑树原理详解及代码实现
  7. 学计算机用什么教材,请问学习计算机软件都需要什么专业教材
  8. 深入剖析Spring(三)——Bean的生命周期
  9. unity3D防止破解插件:Anti-Cheat Toolkit的使用
  10. 消除桌面图标的小盾牌