android设置实现广告倒计时功能
文章目录
- CountDownTimer基本使用
- 增加基础BaseActivity
- 增加固定活动
在Android中,CountDownTimer 是一个用于计时的类,它允许你在指定的时间段内执行某些操作。通常用于倒计时功能,例如显示一个倒计时进度条或者在倒计时结束后执行某个动作。
要使用 CountDownTimer,你需要创建一个继承自 CountDownTimer 的匿名内部类或单独的类,并重写其两个方法:onTick() 和 onFinish()。onTick() 方法会在每个计时周期被调用,通常用于更新 UI 以显示剩余时间。onFinish() 方法会在计时结束时被调用,用于执行倒计时结束后的操作。
以下是如何使用 CountDownTimer 的一个简单示例:
CountDownTimer基本使用
创建一个 CountDownTimer 对象并设置总时间(以毫秒为单位)和时间间隔(以毫秒为单位)。
重写 onTick 方法,该方法将在每个时间间隔触发。
重写 onFinish 方法,该方法将在倒计时结束时触发。
import android.os.Bundle;
import android.os.CountDownTimer;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private TextView textView;
private Button startButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
startButton = findViewById(R.id.startButton);
startButton.setOnClickListener(v -> startCountDown());
}
private void startCountDown() {
new CountDownTimer(10000, 1000) { // 10秒倒计时,每秒更新一次
@Override
public void onTick(long millisUntilFinished) {
textView.setText("剩余时间: " + millisUntilFinished / 1000 + "秒");
}
@Override
public void onFinish() {
textView.setText("倒计时结束!");
// 在这里可以启动其他Activity或执行其他操作
}
}.start();
}
}
下面我们就来使用CountDownTimer完成任务:
增加基础BaseActivity
增加基础BaseActivity 使得其他的页面都可以继承该类,即可同时拥有跳转到固定活动的功能。
package com.ui.base;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.MotionEvent;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.jianguo.retention.BaseApplication;
import ADActivity;
/**
* @author lipeiyong
*/
public abstract class BaseActivity extends AppCompatActivity {
protected String TAG = getClass().getSimpleName();
protected Context mContext;
protected InputMethodManager manager;
public BaseApplication mApplication;
public CountDownTimer countDownTimer;
private final long advTime = 30 * 1000;
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
if (countDownTimer != null) {
countDownTimer.cancel();
}
break;
case MotionEvent.ACTION_UP:
startAD();
break;
}
return super.dispatchTouchEvent(ev);
}
@Override
protected void onPause() {
super.onPause();
if(countDownTimer!= null){
countDownTimer.cancel();
}
}
private void startAD() {
if (countDownTimer == null) {
countDownTimer = new CountDownTimer(advTime, 1000) {
@Override
public void onTick(long millisUntilFinished) {
// 更新 UI 显示剩余时间
}
@Override
public void onFinish() {
startActivity(new Intent(getApplicationContext(), ADActivity.class));
}
};
countDownTimer.start();
} else {
countDownTimer.start();
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLogOutEvent(LogoutEvent event) {
Log.d("BaseActivity", "退出登录,关闭所有activity");
finish();
}
@Override
protected void onResume() {
super.onResume();
startAD();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (countDownTimer != null) {
countDownTimer.cancel();
}
}
}
以上代码中,在dispatchTouchEvent里处理触摸事件,实现广告倒计时功能。在onResume()方法中启动广告计时器,在onDestroy()方法中取消广告计时器。这两个方法分别处理活动的恢复和销毁过程,确保资源得到正确释放和清理。
startAD的方法,用于启动一个倒计时器。当倒计时结束时,会跳转到名为ADActivity的活动。如果倒计时器已经存在,则直接重新启动倒计时器;如果不存在,则创建一个新的倒计时器并启动。
增加固定活动
public class ADActivity extends AppCompatActivity implements View.OnClickListener {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ad);
ImageView imageView = findViewById(R.id.lock_gif);
imageView.setOnClickListener(this);
Glide.with(this).load(R.raw.lock).into(imageView);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.lock_gif) {
this.finish();
}
}
}
ADActivity 不要继承BaseActivity哦。
activity_ad.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:id="@+id/lock_gif"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
最后就是AndroidManifest.xml在增加活动:
<activity android:name=".ui.activity.ADActivity" />