这篇文章将为大家详细讲解有关怎么在Android应用中利用View实现一个倒计时功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
Android 自定义View实现倒计时
需求:
具体方法如下:
/** * 通过selector选择器来改变背景,其中倒计时运行时为android:state_enabled="true", * 不显示倒计时时为android:state_enabled="false"; * */ public class CountDownView extends TextView { private long totalMills = 10 * 1000;//倒计时的总时间,根据需要更改这个值 private long interval = 1000;//倒计时的时间间隔 public CountDownView(Context context) { super(context); } public CountDownView(Context context, AttributeSet attrs) { super(context, attrs); } public CountDownView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } private TimeCount mTimeCount; private void startCount(long totalMills, long countDownInterval) { if (mTimeCount == null) mTimeCount = new TimeCount(totalMills, countDownInterval); mTimeCount.start(); } public void start(){ defaultText = getText().toString(); startCount(totalMills, interval); } public void cancel() { if (mTimeCount != null){ mTimeCount.onFinish(); mTimeCount.cancel(); } } String defaultText = "";//获取到在点击之前的文本内容 class TimeCount extends CountDownTimer { public TimeCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onTick(long millisUntilFinished) { setEnabled(false); setText(millisUntilFinished / 1000 + "S"); } @Override public void onFinish() { setEnabled(true); setText(defaultText); } } }
测试代码:
public class MainActivity extends Activity implements OnClickListener { private CountDownView mCountDownView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mCountDownView = (CountDownView) findViewById(R.id.tv_1); mCountDownView.setOnClickListener(this); findViewById(R.id.tv_2).setOnClickListener(this); } int count = 0; DemoThread thread; @Override public void onClick(View v) { if(v.getId() == R.id.tv_1){ mCountDownView.start(); thread = new DemoThread(); thread.start(); } else if (v.getId() == R.id.tv_2) { mCountDownView.cancel(); System.out.println("wisely 取消倒计时"); } } class DemoThread extends Thread{ @Override public void run() { while (count < 10) { SystemClock.sleep(100); count++; System.out.println("wisely count:" + count); } } } }
总结:
1、使用的时候,为该控件设置点击事件,然后调用start()方法,剩下的就是你自己的代码,一般都是联网调接口。
2、获取验证码的控件背景可以设置为selector选择器,设置android:state_enabled属性。上面例子的selector选择器代码如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_enabled="true" android:drawable="@color/green"/> <item android:state_enabled="false" android:drawable="@color/red"/> </selector>
3、在退出activity时,记得调用控件的cancel方法销毁它,否则会造成内存泄露。
关于怎么在Android应用中利用View实现一个倒计时功能就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。