基于Android的计步器(Pedometer)的讲解(一)——Fragment页面跳转

Flutter 关于计步(一) 目前我找到的比较好的计步插件,就是:pedometer ```bash pedometer: ^3.0.0 ``` pub地址为:[https://pub.flutter-io.cn/packages/pedometer](https://pub.flutter-io.cn/packages/pedometer),下面介绍这个插件在安卓上的实现。 阅读详情

首先需要做的是实现几个页面的跳转,既类似微信的点击按钮,切换页面。

话不多说,这是一个简单的页面切换的Demo,先贴几张实现的效果:

     

图片的底部是5个RadioButton,用来进行页面之间的切换。剩下的部分是一个LinearLayout的布局,用来镶嵌5个Fragment(碎片)的页面。

一共用到5个类:MainActivity、MyAdapter、FragmentHistory、FragmentAnalysis、FragmentPedometer、FragmentPK、FragmentSet

MainActivity的主要代码如下:

package com.example.changepage1;

import java.util.ArrayList;
import java.util.List;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.widget.RadioGroup;

public class MainActivity extends FragmentActivity {
	private RadioGroup rg;
	private List<Fragment> fragments;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.page_mian);
		rg = (RadioGroup) findViewById(R.id.radioGroup);//实例化radiogroup
		fragments = new ArrayList<Fragment>();

		//分别添加5个fragment
		fragments.add(new FragmentHistory());
		fragments.add(new FragmentAnalysis());
		fragments.add(new FragmentPedometer());
		fragments.add(new FragmentPK());
		fragments.add(new FragmentSet());
		new MyAdapter(this, fragments, R.id.Fragment, rg);//设置适配器

	}

}

MyAdapter的代码如下:

package com.example.changepage1;

import java.util.List;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTransaction;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;

/**
 * 这是自己写的一个适配器
 * 
 * @author 李垭超 Date: 2015-1-2 Time: 下午3点
 */
public class MyAdapter implements OnCheckedChangeListener {
	private List<Fragment> fragments; // 一个tab页面对应一个Fragment
	private RadioGroup rgs; // 用于切换tab
	private FragmentActivity fragmentActivity; // Fragment所属的Activity
	private int fragmentContentId; // Activity中所要被替换的区域的id

	private int currentTab = 2; // 当前Tab页面索引

	public MyAdapter(FragmentActivity fragmentActivity,
			List<Fragment> fragments, int fragmentContentId, RadioGroup rgs) {
		this.fragments = fragments;
		this.rgs = rgs;
		this.fragmentActivity = fragmentActivity;
		this.fragmentContentId = fragmentContentId;

		// 默认显示第一页
		FragmentTransaction ft = fragmentActivity.getSupportFragmentManager()
				.beginTransaction();
		ft.add(fragmentContentId, fragments.get(2));
		ft.commit();
		this.rgs.setOnCheckedChangeListener(this);

	}

	/**
	 * 监听radiobutton改变时间,当选择了不同的radiobutton会出发这个函数
	 */
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		for (int i = 0; i < rgs.getChildCount(); i++) {
			if (rgs.getChildAt(i).getId() == checkedId) {
				Fragment fragment = fragments.get(i);
				FragmentTransaction ft = obtainFragmentTransaction(i);

				getCurrentFragment().onPause(); // 暂停当前tab

				if (fragment.isAdded()) {
					fragment.onResume(); // 启动目标tab的onResume()
				} else {
					ft.add(fragmentContentId, fragment);
				}
				showTab(i); // 显示目标tab
				ft.commit();
				

			}
		}
	}

	public Fragment getCurrentFragment() {
		return fragments.get(currentTab);
	}

	private void showTab(int idx) {
		for (int i = 0; i < fragments.size(); i++) {
			Fragment fragment = fragments.get(i);
			FragmentTransaction ft = obtainFragmentTransaction(idx);

			if (idx == i) {
				ft.show(fragment);
			} else {
				ft.hide(fragment);
			}
			ft.commit();
		}
		currentTab = idx; // 更新目标tab为当前tab

	}

	private FragmentTransaction obtainFragmentTransaction(int index) {
		FragmentTransaction ft = fragmentActivity.getSupportFragmentManager()
				.beginTransaction();
		// 设置切换动画
		if (index > currentTab) {

			ft.setCustomAnimations(R.anim.slide_left_in, R.anim.slide_left_out);
		} else {
			ft.setCustomAnimations(R.anim.slide_right_in,
					R.anim.slide_right_out);
		}
		return ft;
	}

}

FragmentHistory、FragmentAnalysis、FragmentPedometer、FragmentPK、FragmentSet的代码依次为:

package com.example.changepage1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 这是分析七天步数的碎片
 * Author: 李垭超   email:296777513@qq.com
 * Date: 2015-1-2
 * Time: 下午2:39
 */
public class FragmentAnalysis extends Fragment{
	private View view;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.analysis, container, false);
		return view;
	}

}

package com.example.changepage1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 这是历史记录的碎片
 * Author: 李垭超   email:296777513@qq.com
 * Date: 2015-1-2
 * Time: 下午2:39
 */
public class FragmentHistory extends Fragment{
	private View view;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.history, container, false);
		return view;
	}

}

package com.example.changepage1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 这是记步的碎片
 * Author: 李垭超   email:296777513@qq.com
 * Date: 2015-1-2
 * Time: 下午2:39
 */
public class FragmentPedometer extends Fragment{
	private View view;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.pedometer, container, false);
		return view;
	}

}

package com.example.changepage1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 这是记步的碎片
 * Author: 李垭超   email:296777513@qq.com
 * Date: 2015-1-2
 * Time: 下午2:39
 */
public class FragmentPK extends Fragment{
	private View view;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.pk, container, false);
		return view;
	}

}

package com.example.changepage1;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

/**
 * 这是设置的碎片
 * Author: 李垭超   email:296777513@qq.com
 * Date: 2015-1-2
 * Time: 下午2:39
 */
public class FragmentSet extends Fragment{
	private View view;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		view = inflater.inflate(R.layout.set, container, false);
		return view;
	}

}

这个例子的的完整demo在:

http://download.youkuaiyun.com/detail/a296777513/8320619


完整的Pedometer项目在github和优快云上:

github下载


优快云下载

Android 系统pedometer计步器源码.rar Android 系统pedometer计步器源码,或者叫做步数计,计数器,微信步数计数器,本源码是android上的开源项目pedometer 的完整源代码,来自国外,注释为英文,可以国内用户开发基于Android的计步器提供一些原始资料。 立即下载

相关推荐

android 计步器(pedometer)

android 计步器的实现,可以比较准确的算出步数。

flutter使用pedometer计步器的正确方式

再逼逼几句,计步器传感器获取的自手机上次重启之后的步数,可以根据需求对步数进行计算,再就是大家最关系的,app关闭之后,还可以继续计步,毕竟是官方api,所有烦人Android进程保活可以不用操心了。项目中要用到计步器,大家都在推荐pedometer,可是我导入到项目中,使用android真机测试,没有报错,onStepCount不执行。可以看出插件android原生部分,是通过调用系统的计步传感器完成,可是我为什么调用不成功呢?原来如此,没有申请权限。再次编译运行,果然可以可以获取到步数。

u013729608的专栏 1457

计步器Demo

这是一个计步器demo,包括计步算法注释,可以直接运行,需要的朋友可以下载。

flutter鸿蒙重写pedometer实现步行监听和步数记录

由于flutter插件市场里面的pedometer没有支持鸿蒙,并且没有统一接口,所以我重写了整个工程,实现统一的interface,并且兼容pedometer包里面的所有接口和使用方式,并在此基础上增加了对鸿蒙的支持。

dfsgg的专栏 289

Pedometer计步器源代码

Pedometer 计步器 源代码 加速度传感器采用ADXL330

计步器demo

简单实现了iOS的计步器功能,能够实时统计用户走了多少步。可以开启,和关闭该功能,哪里有做的不好的大家可以和我留言哦

Android开发者应该深入学习的10个开源应用项目[转]

  Android开发者应该深入学习的10个开源应用项目   Android开发带来新一轮热潮让很多移动开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用。其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力。学习开源代码是掌握技术的一个最佳方式。下面推荐几个应用开源项目,这些项目不仅提供了优秀的创意,也可以直接掌握 Android内核的接口使用: 1.Andr...

weixin_33911824的博客 148

Pedometer-master_计步器_计步_计步传感器_android开发_androidstudio_

一个简单,轻量的计步器app,使用硬件传感器计算步数,而且对电池的消耗非常小。对学习计步功能而言是不错的项目。

Android 12上焕然一新的小组件:美观、便捷和实用(2),10天用Flutter撸了个高仿携程App

简要罗列一下12针对小组件新增的API,方便大家查阅。

2401_84150107的博客 853

IOS计步器功能实现之Healthkit和CMPedometer

现在越来越多的人关注运动和健康,iOS系统也在很早的时候就自带了健康APP,下面详细描述一下在我们开发中,怎么实现计步器功能。

MATLAB MinGW-w64 C/C++ 编译器 手动安装配置

根据Matlab版本与MinGW版本对应关系,手动安装、配置并测试MinGW

zjh2883的博客 7340

GitLab与Jenkins配置

接上一篇文章,CentOS 安装Jenkins,咱们再进一步深入,将GitLab与Jenkins配置联系起来,以便触发持续集成和持续部署,也就是CICD。

动哒APP—运动健康科技提供商 566

电子病历编辑器源码(Springboot+原生HTML)

应用场景包括:电子病历书写、体温单录入、全平台信息采集、检验检查报告、不良事件上报等。 此外,电子病历编辑器软件还适用于医生工作站的病历编辑、护士工作站的护理记录输入、PASC/LIS/RIS报告编辑打印、病案首页、出院小结、病程记录、手术记录、各种知情书、康复及精神学科用的量表、临床路径用表单界面等等。 这些应用场景都涉及到了医疗文书编辑的需求,因此电子病历编辑器软件在这些场景中具有广泛的应用价值。

xingchen优快云的博客 3894

Flutter Provider 原理解析

阅读本文可收获 知晓Flutter中InheritedWidget的使用场景和基本原理 知晓现在市面上的Provider的实现方案 实现一个简易版的 MiniProvider Flutter Provider的主要功能 数据共享 局部刷新 要实现以上两个功能点,首先要来了解一下Flutter中的InheritedWidget InheritedWidget简介 Flutter Widget 简介 Everything is a widget. Widget是『描述』 Flutter U

Dream It Possible 4231

Python实战:5分钟搞定抖音无水印视频下载(附完整代码)

本文系统介绍了抖音无水印视频下载的多种技术方案,重点解析了抖音视频的获取逻辑与去水印原理。文章提供了从零代码的浏览器插件到可编程的Python脚本的完整实现路径,并附带了详细的代码示例,帮助用户快速构建自己的抖音视频下载工具箱。

weixin_29089057的博客 846

PCB激光直接成像(LDI)设备技术解析与优化方案

激光直接成像(LDI)是PCB制造中的关键数字化工艺,通过激光束直接在基板上形成电路图案。其核心技术在于高精度光学系统与智能控制算法的结合,工作精度可达微米级。在HDI板、柔性电路等高端PCB制造中,LDI技术能显著提升线宽精度和层间对位准确性。当前行业面临材料适配性、热变形控制等挑战,动态能量补偿、多波长曝光等创新方案正在突破这些瓶颈。随着模块化设计、预测性维护等工程实践的普及,LDI设备综合效率持续提升,为5G、汽车电子等领域的精密电路生产提供关键技术支撑。

weixin_29168393的博客 390

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

经过两个月的努力,终于把计步器(Pedometer)APP初步完成,已经可以正常使用,话不多说,首先上几张APP正常运行的图片:

K-night的专栏 1万+

Vue3实战:企业级应用集成钉钉扫码登录全流程解析

本文详细解析了在Vue3企业级应用中集成钉钉扫码登录的全流程。从钉钉开放平台应用创建与配置,到Vue3前端如何优雅地嵌入并管理扫码组件,再到后端如何安全地处理OAuth 2.0授权码以换取用户信息并完成登录,提供了完整的实战代码与避坑指南。该方案能有效实现安全便捷的单点登录,统一企业身份认证。

weixin_29019241的博客 289

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

然后我根据网上的一个例子,又做出了另一个Histogram的例子,但是没有动画和点击显示数值,应为7个柱状图形都是在一个Histogramview类里实现的,不能添加点击事件,但是看上去比第一个更形象。 先给出效果图吧 Histogram的代码如下: package com.style.histogram; import android.annotation.SuppressLin

K-night的专栏 3541

原神真端,原神服务端,虚拟机启动部署傻瓜式教学

没玩过抽卡 游戏想体验一下抽卡的感觉,听说原神有真端了,所以弄一个局域网的服务体验一下,这里要感谢一些服务端的分享者。

azyouyouyou的博客 1万+

KUKA机器人在自动运行时,动作不流畅,每个点位都有停顿的解决办法

KUKA机器人在自动运行时,动作不流畅,每个点位都有停顿的解决办法

Robot_PLC_HMI_Automation 4577

计步器转载

先给出ExpandableListView的一些效果图 先给出ExpandableListViewAdapter的代码:   package com.bit.expandablelistview; import java.util.HashMap; import java.util.List; import android.content.Context; import android

lc41214的博客 439

Autosar MCAL-S32K324 Fee配置-基于EB

Autosar MCAL S32K324 Fee配置详解

赞的博客 1544

Android自定义统计图(柱状图,折线图,饼状图)

最近由于项目需要,研究了一些统计图的做法,开始时,看了很多博文,大部分都是引用第三方的库,虽然简单,易上手,但是功能太死板,有很多要求都是不能满足的,所以经过研究,自己使用View中的canvas重新绘图制作统计图。首先上一张gif的效果图吧。 点击这里下载(0分下载) 一、demo的结构 一个activity中嵌套了三个fragment(v4),是用viewpager对页面进行滑动

K-night的专栏 5812

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

上一篇: 基于Android的计步器(Pedometer)的讲解-序
下一篇: 基于Android的计步器(Pedometer)的讲解(二)——柱状图分析
Bobby_lyc
博客等级 码龄16年 1164粉丝 89原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值