Chronometer快速开发计时器
来源:互联网 发布:身份证识别软件app 编辑:程序博客网 时间:2024/06/06 07:18
前言:开发计时器的方法基本上有两种,一种是用chronometer实现的,另外一种是通过timer,handler等一起组合实现,如果想要简单的练手或者只是想要一个简单的计时器的话,chronometer便是首要选择了
实现代码如下:
1.布局页,布局页有两种不同格式的布局:00:00与00:00:00这两种
第一种:
<Chronometer android:layout_width="match_parent" android:layout_height="wrap_content" android:format="00:00" android:gravity="center" android:id="@+id/timer" android:layout_centerInParent="true" android:layout_below="@+id/text_num" android:textColor="@color/colorWhite" />
第二种其实和第一种的差别极小,就是把00:00改为00:00:00
<Chronometer android:layout_width="match_parent" android:layout_height="wrap_content" android:format="00:00:00" android:gravity="center" android:id="@+id/timer" android:layout_centerInParent="true" android:layout_below="@+id/text_num" android:textColor="@color/colorWhite" />
然后就是在activity里面需要写的代码了
找到该控件然后,通过控件来控制他的开始与结束,当然中间最好做点优化,因为优化代码的话我还没有测试过,所以如果那位网友用到了我得例子的话,发现问题的话,麻烦和我吱个声,我的扣扣1269729771
package com.example.com.mlsdome.Activity.Fragment;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.os.Bundle;import android.os.SystemClock;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.view.animation.AlphaAnimation;import android.view.animation.Animation;import android.view.animation.LinearInterpolator;import android.view.animation.RotateAnimation;import android.widget.Chronometer;import android.widget.ImageView;import android.widget.Toast;import com.example.com.mlsdome.R;/** * Created by 12697 on 2017/3/13. *//** 运动fragment** */public class SportFragment extends Fragment{ private ObjectAnimator objAnim = null; private ImageView sport_start,sport_stop; private ImageView sport_anmi; private RotateAnimation rotateAnimation; private boolean isStopAnim = false; private float currentValue = 0f; private AlphaAnimation animation2; private Chronometer timer; private int hour_fornt_int=0; public static SportFragment getIntance() { return new SportFragment(); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); sport_stop= (ImageView) view.findViewById(R.id.sport_stop); sport_anmi= (ImageView) view.findViewById(R.id.sport_anmi); sport_start= (ImageView) view.findViewById(R.id.sport_start); timer= (Chronometer) view.findViewById(R.id.timer); animation2 = new AlphaAnimation(1.0f, 1.0f); animation2.setDuration(3000); animation2.setInterpolator(new LinearInterpolator());//不停顿 animation2.setRepeatCount(-1); sport_start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60); /* * 当大于90个小时时提示并清除计时器 * * * */ if (hour_fornt_int>9) { timer.setBase(SystemClock.elapsedRealtime()); ////清空计时器 Toast.makeText(getContext(),"亲,你已经跑了相当一段时间了,休息一下吧!",Toast.LENGTH_SHORT).show(); } /* * 当超过90个小时时,清零并加一 * * */ if (hour>9) { hour_fornt_int++; hour=0; } String hour_fornt= String.valueOf(hour_fornt_int); timer.setFormat(hour_fornt+String.valueOf(hour)+":%s"); timer.start(); startAnimation(); sport_stop.setVisibility(View.VISIBLE); sport_start.setVisibility(View.GONE); } }); sport_stop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { timer.stop(); pauseAnimation(); sport_stop.setVisibility(View.GONE); sport_start.setVisibility(View.VISIBLE); } }); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { return inflater.inflate(R.layout.sport_fragment_layout,container,false); } /** * 开始动画 * */ public void startAnimation() { // 设置动画,从上次停止位置开始,这里是顺时针旋转360度 objAnim = ObjectAnimator.ofFloat(sport_anmi, "Rotation", currentValue - 360, currentValue); // 设置持续时间 objAnim.setDuration(3000); // 设置循环播放 objAnim.setRepeatCount(-1); objAnim.setInterpolator(new LinearInterpolator());//不停顿 // 设置动画监听 objAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { // 监听动画执行的位置,以便下次开始时,从当前位置开始 currentValue = (Float) animation.getAnimatedValue(); } }); objAnim.start(); sport_anmi.startAnimation(animation2); } /** * 暂停动画 * */ public void pauseAnimation() { objAnim.cancel(); sport_anmi.clearAnimation();// 清除此ImageView身上的动画 }}
这里面有一份动画开启和关闭的代码,不过并不影响观看
timer.setFormat(hour_fornt+String.valueOf(hour)+":%s");
int hour = (int) ((SystemClock.elapsedRealtime() - timer.getBase()) / 1000 / 60);
关键在于这两句代码,获取的是系统的时间,还有的就是通过getBase()来清除计时器
OK,基本上到这里一个简单的计时器就实现了!!因为对于这个我也是第一次用,请大家多多指教!!
0 0
- Chronometer快速开发计时器
- 计时器:Chronometer
- Chronometer 计时器
- 计时器:Chronometer
- Chronometer 计时器
- Chronometer计时器
- 计时器Chronometer
- Chronometer计时器
- Chronometer(计时器)
- Android控件开发之Chronometer计时器
- Android开发中Chronometer计时器用法问题
- Android开发——Chronometer计时器控件
- Android开发——倒计时器自定义chronometer
- Chronometer 计时器的使用
- android之计时器chronometer
- android之计时器chronometer
- android 计时器 Chronometer
- android之计时器 chronometer
- 事务的传播行为
- 【SSH网上商城项目实战10】商品类基本模块的搭建
- Java中方法的重载和继承
- Android中AsyncTask的使用
- 【CSS3】用纯CSS实现加载中动画效果
- Chronometer快速开发计时器
- mysql提示错误代码1045什么问题原因怎么办?解决方法
- Windows,Linux文件夹相关操作
- 任意切换线程的工具类
- pytho脚本通过boto3访问radosgw提供的对象存储
- 上传文件失败 Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)
- 蓝桥杯 波动数列
- JavaScript小项目——2048数字游戏
- 下面说说unset的用处,与为什么