前言:开发计时器的方法基本上有两种,一种是用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,基本上到这里一个简单的计时器就实现了!!因为对于这个我也是第一次用,请大家多多指教!!