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