当前位置: 首页 > article >正文

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" />
在这里插入图片描述


http://www.kler.cn/news/314134.html

相关文章:

  • [Python数据可视化]Plotly Express: 地图数据可视化的魅力
  • 第十九节:学习WebFlux与前端响应式-非阻塞-流式通讯(自学Spring boot 3.x的第四天)
  • Java操控Redis (面经之 使用Redis)
  • 【HTTP】构造HTTP请求和状态码
  • [译] Go语言的源起,发展和未来
  • Rust语言入门第七篇-控制流
  • Highcharts甘特图基本用法(highcharts-gantt.js)
  • 安装黑群晖系统,并使用NAS公网助手访问教程(好文)
  • 【系统架构设计师】虚拟机架构风格
  • 十五、差分输入运算放大电路
  • C++——模板初阶
  • 网页聊天——测试报告——Selenium自动化测试
  • 分类预测|2024年最新优化算法鹦鹉优化器PO|基于鹦鹉优化SVM支持向量机数据分类预测Matlab程序PO-SVM
  • 2024年9月python二级易错题和难题大全(附详细解析)(五)
  • allWebPlugin中间件自定义alert、confirm及prompt使用
  • 力扣1143-最长公共子序列(Java详细题解)
  • 分布式光伏发电系统如何确保电能质量达到并网要求?
  • Tiny-universe学习笔记1:Qwen-blog
  • 数据飞轮:打造业务增长的持续循环
  • C++——string的了解和使用
  • 相见恨晚的一本书《纳瓦尔宝典:财富与幸福指南》
  • 内网渗透- 内网渗透的基本知识
  • 【物联网】时序数据库InfluxDB解析及1.x版本与2.x版本区别详解
  • Docker 笔记
  • java计算字符串中大写字母的个数
  • 30道常见的软件测试面试题(含答案+文档)
  • 【若依框架】按时间查询数据的操作
  • VScode 使用Code Runner 运行输出控制台中文乱码解决
  • Qt中的延时
  • 基于TCP实现聊天