ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:52.74KB ,
资源ID:8828465      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8828465.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(Android倒计时效果.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

Android倒计时效果.docx

1、Android倒计时效果Android倒计时效果在Android开发中,我们一般用3个简单的方法来实现定时器的效果:采用Handler与线程的sleep(long)方法,通过线程休眠的方法来定时利用handler来发送数据,并在handler的handlerMessage()方法中进行处理。采用Handler的postDelayed(Runnable, long)方法,这也是我在开发中经常用到的方法,例如:启动页跳转引导页和主页面的时候,我就经常使用这种方法,还有ViewPager做轮播图的时候等等。采用Handler与timer及TimerTask结合的方法,这种方法在我的开发中,有一次要做

2、直播页面,需要模仿观看回放时候的点赞效果,虚拟模仿观看者点赞效果,在1秒之内随机点多少个赞,就是用的这种方法实现的。下面详细介绍一下三个方法该怎么使用:下面逐一介绍:一、采用Handle与线程的sleep(long)方法。定义一个Handler类,用于处理接受到的Message。Handler handler = new Handler()Overridepublic void handleMessage(Message msg) super.handleMessage(msg);/这里写handler要处理的工作,例如页面的文字的改变,;新建一个实现Runnable接口的线程类。public

3、 class MyHandlerThread implements Runnable Override public void run() while (true) try /线程休眠一秒钟 Thread.sleep(1000); /通过Message对象来发送消息 Message message = new Message(); message.what=1; handler.sendMessage(message); catch (InterruptedException e) e.printStackTrace(); 在需要启动线程的地方通过Thread的start()方法来启动线程:n

4、ew Thread(new MyHandlerThread().start();一旦通过3中的方法启动线程后,该线程将会每隔一秒钟发送一个消息,handler在接受到消息之后就可以进行数据的处理操作了。二、采用Handler的postDelayed(Runnable, long)方法。这个实现比较简单,在实际开发中也经常用到。定义一个Handler类:Handler handler = new Handler(); Runnable runnable = new Runnable() Override public void run() /这里写处理的逻辑 handler.postDelaye

5、d(this, 2000); ;启动计时器:调用 handler.postDelayed(this, 2000);方法,会每隔两秒执行一个runnable中的run()方法,达到定时的效果。停止计时器:handler.removeCallbacks(runnable);三、采用Handler与timer及TimerTask结合的方法,这种方法在用的时候稍微有点复杂,这里涉及到Timer和TImerTask这两个类的使用定义定时器、定时器任务及Handler句柄:private Timer timer;private TimerTask timerTask;Handler handler = n

6、ew Handler() Override public void handleMessage(Message msg) /这里写要处理的逻辑 super.handleMessage(msg); ;初始化计时器任务:timerTask = new TimerTask() Override public void run() Message message = new Message(); message.what = 1; handler.sendMessage(message); ;启动定时器:最后调用timer的schedule()方法来启动定时器。schedule()如下所示:我们一般调

7、用timer的schedule(TimerTask task,long delay)和schedule(TimerTask task,long delay,long period)这两个方法,第一个方法,timerTask将会在dalay/1000秒后执行.且只执行一次。第二个方法会在dalay/1000秒后执行,且经过period/1000秒后将会重新执行该timeTask。关闭定时器:timer.cancel();调用timer的cancle()方法即可关闭该定时器。总结:首先非常感谢原作者风吹过wu在安卓巴士网站的分享。其次掌握这三个方法不仅仅加深对Handle、Thread、Timer

8、和TimerTask这几个类的理解,更重要的是可以提高我们在开发中的工作效率。今日工作中需要实现一个类似淘宝的时分秒倒计时的效果,此效果就可以用上述所述的方法来完成,不过需要仔细计算而已。但是,开发中讲究的是高效率,高质量,于是自己就从GitHub上serach了一份代码用着挺好的,推荐给大家。这里主要是一个自定义的View-RushBuyCountDownTimerView,package com.qust.widght;import java.util.Timer;import java.util.TimerTask;import android.annotation.SuppressLi

9、nt;import android.content.Context;import android.os.Handler;import android.os.Message;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.qust.rushbuycoun

10、tdowntimerview.R;SuppressLint(HandlerLeak)public class RushBuyCountDownTimerView extends LinearLayout / 小时,十位private TextView tv_hour_decade;/ 小时,个位private TextView tv_hour_unit;/ 分钟,十位private TextView tv_min_decade;/ 分钟,个位private TextView tv_min_unit;/ 秒,十位private TextView tv_sec_decade;/ 秒,个位priva

11、te TextView tv_sec_unit;private Context context;private int hour_decade;private int hour_unit;private int min_decade;private int min_unit;private int sec_decade;private int sec_unit;/ 计时器private Timer timer;private Handler handler = new Handler() public void handleMessage(Message msg) countDown(); ;

12、public RushBuyCountDownTimerView(Context context, AttributeSet attrs) super(context, attrs); this.context = LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.view_countdowntimer, this); tv_hour_decade = (TextV

13、iew) view.findViewById(R.id.tv_hour_decade); tv_hour_unit = (TextView) view.findViewById(R.id.tv_hour_unit); tv_min_decade = (TextView) view.findViewById(R.id.tv_min_decade); tv_min_unit = (TextView) view.findViewById(R.id.tv_min_unit); tv_sec_decade = (TextView) view.findViewById(R.id.tv_sec_decade

14、); tv_sec_unit = (TextView) view.findViewById(R.id.tv_sec_unit);/* Description: 开始计时* param* return void* throws*/public void start() if (timer = null) timer = new Timer(); timer.schedule(new TimerTask() Override public void run() handler.sendEmptyMessage(0); , 0, 1000); /* Description: 停止计时* param*

15、 return void* throws*/public void stop() if (timer != null) timer.cancel(); timer = null; /* throws Exception* Description: 设置倒计时的时长* param* return void* throws*/public void setTime(int hour, int min, int sec) if (hour = 60 | min = 60 | sec = 60 | hour 0 | min 0| sec 0) throw new RuntimeException(Ti

16、me format is error,please check out your code); hour_decade = hour / 10; hour_unit = hour - hour_decade * 10; min_decade = min / 10; min_unit = min - min_decade * 10; sec_decade = sec / 10; sec_unit = sec - sec_decade * 10; tv_hour_decade.setText(hour_decade + ); tv_hour_unit.setText(hour_unit + );

17、tv_min_decade.setText(min_decade + ); tv_min_unit.setText(min_unit + ); tv_sec_decade.setText(sec_decade + ); tv_sec_unit.setText(sec_unit + );/* Description: 倒计时* param* return boolean* throws*/private void countDown() if (isCarry4Unit(tv_sec_unit) if (isCarry4Decade(tv_sec_decade) if (isCarry4Unit

18、(tv_min_unit) if (isCarry4Decade(tv_min_decade) if (isCarry4Unit(tv_hour_unit) if (isCarry4Decade(tv_hour_decade) Toast.makeText(context, 时间到了,Toast.LENGTH_SHORT).show(); stop(); /* Description: 变化十位,并判断是否需要进位* param* return boolean* throws*/private boolean isCarry4Decade(TextView tv) int time = Int

19、eger.valueOf(tv.getText().toString(); time = time - 1; if (time 0) time = 5; tv.setText(time + ); return true; else tv.setText(time + ); return false; /* Description: 变化个位,并判断是否需要进位* param* return boolean* throws*/private boolean isCarry4Unit(TextView tv) int time = Integer.valueOf(tv.getText().toSt

20、ring(); time = time - 1; if (time 0) time = 9; tv.setText(time + ); return true; else tv.setText(time + ); return false; 从上面代码中即可看到,此倒计时效果就是使用上面所提到的第三种方法来完成的,其中所用到的view_countdowntimer布局文件如下: RushBuyCountDownTimerViewStyle这个Style文件如下,在这个文件中主要定义字体大小、颜色、背景色等: wrap_content wrap_content drawable/bg_view

21、center 0 android:color/white 35sp bold上面的布局效果默认是这样的:00:00:00 /分别对应时、分、秒最后: 假如需要在MainActivity.Java中使用此倒计时控件,只需要在MainActivityjava的布局文件activity_main.xml中加入此控件,设置倒计时的时候,然后在代码中调用start()方法即可实现倒计时的效果。activity_main.xml文件如下:android:layout_width=match_parent android:layout_height=match_parent android:orientat

22、ion=vertical MainActivity.java文件如下:package com.qust.widght;import android.app.Activity;import android.os.Bundle;import com.qust.rushbuycountdowntimerview.R;public class MainActivity extends Activity private RushBuyCountDownTimerView timerView;Overrideprotected void onCreate(Bundle savedInstanceState

23、) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); timerView = (RushBuyCountDownTimerView) findViewById(R.id.timerView); /设置倒计时的时、分、秒 timerView.setTime(10, 0, 10); / 开始倒计时 timerView.start(); 最后:通过上面的几个步骤即可完成倒计时效果,且rushbuycountdowntimerview中也加入了倒计时结束时候的逻辑处理,一般我们需要在这里给用户提示信息,或者对View进行处理等,详细的就不在这里说了。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1