android中倒计时动画,Android实现倒计时效果

本文实例为大家分享了Android实现倒计时效果的具体代码,供大家参考,具体内容如下

一个倒计时的效果

先看效果图:

29df235a11b4b89abb3862e58f6d7255.png

直接上代码:

这里是关于倒计时 …天时分秒…的逻辑判断

/**

* 倒计时计算

*/

private void computeTime() {

mSecond--;

if (mSecond < 0) {

mMin--;

mSecond = 59;

if (mMin < 0) {

mMin = 59;

mHour--;

if (mHour < 0) {

// 倒计时结束

mHour = 23;

mDay--;

if(mDay < 0){

// 倒计时结束

mDay = 0;

mHour= 0;

mMin = 0;

mSecond = 0;

}

}

}

}

}

定时器主要代码如下…当然也可以开线程或者开后台服务来处理…只是没那种必要…定时器就可以搞定容易控制…毕竟倒计时时间起点…你总得后台获取吧,不是做时钟闹钟…如果是做时钟闹钟…拿你也不用考虑后台服务或者自己开线程…而是使用AlarmManager来实现

/**

* 开启倒计时

* //time为Date类型:在指定时间执行一次。

* timer.schedule(task, time);

* //firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。

* timer.schedule(task, firstTime,period);

* //delay 为long类型:从现在起过delay毫秒执行一次。

* timer.schedule(task, delay);

* //delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。

* timer.schedule(task, delay,period);

*/

private void startRun() {

TimerTask mTimerTask = new TimerTask() {

@Override

public void run() {

Message message = Message.obtain();

message.what = 1;

timeHandler.sendMessage(message);

}

};

mTimer.schedule(mTimerTask,0,1000);

}

修改界面,利用handler来提醒更新界面

private Handler timeHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

super.handleMessage(msg);

if (msg.what == 1) {

computeTime();

mDays_Tv.setText(mDay+"");//天数不用补位

mHours_Tv.setText(getTv(mHour));

mMinutes_Tv.setText(getTv(mMin));

mSeconds_Tv.setText(getTv(mSecond));

if (mSecond == 0 && mDay == 0 &am

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android实现倒计时动画,可以参考以下步骤: 1. 创建一个自定义 View,并在其实现倒计时动画的绘制逻辑。 2. 在 View 添加一个计时器,每隔一段时间更新倒计时的数值,并调用 invalidate() 方法刷新界面。 3. 在绘制逻辑,根据当前的倒计时数值计算出圆环的弧度,并使用 Canvas 绘制圆环和数字。 4. 可以添加一些动画效果,例如圆环的渐变填充色、数字的放大缩小等等,增强视觉效果。 以下是一个简单的示例代码,仅供参考: ``` public class CountDownView extends View { private static final long COUNT_DOWN_INTERVAL = 1000; // 倒计时间隔,默认为 1 秒 private static final int DEFAULT_COUNT_DOWN_TIME = 60; // 默认倒计时时间为 60 秒 private Paint mPaint; private RectF mRectF; private float mSweepAngle; private int mCountDownTime; private long mStartTime; private boolean mIsCountingDown; public CountDownView(Context context) { this(context, null); } public CountDownView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CountDownView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // 初始化画笔 mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(10); // 初始化圆弧矩形 mRectF = new RectF(); // 初始化倒计时时间 mCountDownTime = DEFAULT_COUNT_DOWN_TIME; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 计算圆弧矩形 int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); int size = Math.min(width, height); int padding = 10; mRectF.set(padding, padding, size - padding, size - padding); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // 绘制圆弧 mPaint.setColor(Color.GRAY); canvas.drawArc(mRectF, 0, 360, false, mPaint); mPaint.setColor(Color.BLUE); canvas.drawArc(mRectF, -90, mSweepAngle, false, mPaint); // 绘制数字 mPaint.setColor(Color.BLACK); mPaint.setTextSize(50); String text = String.valueOf(mCountDownTime); Rect textBounds = new Rect(); mPaint.getTextBounds(text, 0, text.length(), textBounds); canvas.drawText(text, mRectF.centerX() - textBounds.width() / 2, mRectF.centerY() + textBounds.height() / 2, mPaint); } public void startCountDown() { if (mIsCountingDown) { return; } mIsCountingDown = true; mStartTime = System.currentTimeMillis(); post(countDownRunnable); } public void stopCountDown() { mIsCountingDown = false; removeCallbacks(countDownRunnable); } private Runnable countDownRunnable = new Runnable() { @Override public void run() { long elapsedTime = System.currentTimeMillis() - mStartTime; int remainingTime = mCountDownTime - (int) (elapsedTime / COUNT_DOWN_INTERVAL); if (remainingTime >= 0) { mSweepAngle = (float) remainingTime / mCountDownTime * 360; invalidate(); postDelayed(this, COUNT_DOWN_INTERVAL); } else { stopCountDown(); } } }; } ``` 使用时可以调用 startCountDown() 方法开始倒计时,调用 stopCountDown() 方法停止倒计时
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值