android设置实现广告倒计时功能

news2024/9/21 23:14:56

文章目录

    • 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.coloradmin.cn/o/2141831.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

采用qt做一个命令行终端

qt做一个类似系统命令行终端的工具&#xff0c;方便集成到自己的软件里使用&#xff0c;这样能保证软件的整体性&#xff0c;而且是真正的做到和系统命令行终端一样的交互方式&#xff0c;而不是单独搞个编辑框的方式输入命令&#xff08;大部分博客都是做成这个样子&#xff0…

不善言辞的程序员适合做项目经理吗?

项目经理的角色需要承担多重任务&#xff0c;包括团队协调、资源调配、风险管理、沟通与汇报等。因此&#xff0c;很多人认为项目经理需要较强的沟通能力和外向性格。然而&#xff0c;不善言辞的程序员是否适合这一职位&#xff0c;实际上取决于多个因素。以下从不同角度进行分…

程序设计题(25-32)

第二十五题 题目 请编写函数fun&#xff0c;其功能是:在一个含有11个四位数的数组中&#xff0c;统计出这些数的奇数、偶数个数&#xff0c;然后计算出个数多的那些数的算数平均值并由函数返回&#xff0c;个数通过yy传回。 例如&#xff0c;若11个数据为:1101, 1202, 1303,…

AI+RPA 实战揭秘:DrissionPage 助力 CSDN 热榜数据抓取与 AI 结合

在前一篇文章《AIRPA&#xff1a;开启智能自动化新时代》 发布之后&#xff0c;今天我们将以实战的方式深入介绍数据分析中的RPA究竟是怎样抓取数据的&#xff0c;以及它与 AI 又是如何紧密结合的。首先&#xff0c;让我们来认识一个重要的工具包 ——DrissionPage。 一、Dris…

【例题】lanqiao301 实现基数排序

输入输出样例 输入 6 7 1 4 8 5 2输出 1 2 4 5 7 8解题思路 翻译&#xff1a;就是从个位到十位、……比较大小。 代码 nint(input()) alist(map(int,input().split())) a.sort() print( .join(map(str,a)))

Linux: network: delay and burst

最近遇到一个false-network的问题&#xff0c;抓到的网络包的特征是&#xff0c;有十几秒的延迟&#xff0c;然后来了一个burst。这个现象说明这个包肯定是缓存在了一个地方&#xff0c;但是具体是什么地方&#xff0c;就需要抓包确定。 这次的缓存的地方是虚拟机内部。由于一…

【刷题】Day5--数字在升序数组中出现的次数

Hi! 今日份刷题~ 数字在升序数组中出现的次数_牛客题霸_牛客网 我感觉题目简单&#xff0c;我的解答也很简单&#xff0c;二分法遗忘&#xff0c;有时间复习一下尝试新的解法。 /*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的…

轻松上手Cursor,体验丝滑编程

最近Cursor大火。 作为一名程序员&#xff0c;理应接触接触&#xff0c;了解了解。 好吧&#xff01;这一了解&#xff0c;我直接用Cursor替换了用了好几年的vscode了。 下面我把体验Cursor的过程总结了一下。你看看。 Cursor是啥 Cursor是一款革命性的AI驱动代码编辑器&a…

rocky Linux 9.4系统配置zabbix监控MySQL主从复制状态与配置钉钉告警

MySQL主从复制原理&#xff1a; 1. 主从复制的基本概念 主服务器&#xff08;Master&#xff09;&#xff1a;负责处理所有的写操作&#xff08;INSERT、UPDATE、DELETE&#xff09;&#xff0c;并将这些操作记录到二进制日志&#xff08;binary log&#xff09;中。 从服务器…

深度揭秘:日志打印的艺术与实战技巧,让你的代码会说话!

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f341;日志&#x1f342;日志分模块实现讲解&#x1f343;日志等级的实现&#x1f965;日志时间*时间的获取* &#x1f308;文…

Nginx搭建直播服务器,并用rtmp,http-flv,hls三种模式拉流观看直播的流程

一、首先搭建直播服务器 环境widows&#xff0c;并且已经集成了 &#xff1a;nginx-http-flv-module模块 nginx.conf配置如下&#xff1a; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #error…

Vue3中集成高德地图并实现平移缩放功能

大家好&#xff0c;随着前端技术的不断发展&#xff0c;地图应用在我们的项目中越来越常见。本文将介绍如何在Vue3项目中集成高德地图&#xff0c;并通过简单的配置实现地图的平移和缩放功能。 实现步骤 1、申请高德地图密钥&#xff08;Key&#xff09;&#xff08;已有key可…

Git使用详解:从安装到精通

前言 什么是Git Git是一个分布式版本控制工具&#xff0c;主要用于管理开发过程中的源代码文件&#xff08;Java类、xml文件、html页面等&#xff09;&#xff0c;在软件开发过程中被广泛使用。 可以理解&#xff1a; git是一个管理源代码的工具&#xff0c;主要用于企业团队开…

openwrt wsdd模块介绍

wsdd简介 wsdd是一个实现Web服务发现主机守护进程的工具。这使得&#xff08;如Samba&#xff09;主机&#xff0c;像你的本地网络存储设备&#xff0c;能够被Windows这样的Web服务发现客户端找到。 目的 由于Windows不再支持NetBIOS发现&#xff0c;wsdd使用Web服务发现方法使…

密码学---easy_hash

题目出处&#xff1a;首页 - Bugku CTF ✨打开题目有两个文件 ✨打开flag.py后开始分析所给的代码 import hashlib # 导入 hashlib 模块&#xff0c;用于计算哈希值 from multiprocessing import Pool # 从 multiprocessing 模块导入 Pool 类&#xff0c;用于多进程处理d…

istio中如何使用serviceentry引入外部服务

假设需要引入一个外部服务&#xff0c;外部服务ip为10.10.102.90&#xff0c;端口为32033. 引入到istio中后&#xff0c;我想通过域名gindemo.test.ch:9090来访问这个服务。 serviceentry yaml内容如下&#xff1a; apiVersion: networking.istio.io/v1beta1 kind: ServiceEn…

Python 课程5-NumPy库

在数据处理和科学计算中&#xff0c;NumPy 是一个非常强大且基础的库。除了基本的创建数组功能之外&#xff0c;NumPy 提供了许多强大的函数和方法&#xff0c;用于执行高级的矩阵运算、统计分析、逻辑操作等。以下是一些常用且非常有用的 NumPy 指令&#xff0c;涵盖了创建数组…

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52

STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52 在嵌入式MCU软件开发中&#xff0c;通过串口进行人机交互是非常常见且重要的操作方式。获取帮助的命令通常用来向用户展示所有支持的交互指令及其使用方法。详细介绍如下&#xff1a; 获取帮助命令的作用 用户友好性&#…

进程之信号

文章目录 进程信号中断的概念信号是异步事件Linux信号信号发生的来源信号的处理方式signal函数示例--使用signal函数对常见的信号进行捕获、执行默认操作、忽略三种方式处理 SIGCHLD信号示例--使用SIGCHLD信号来避免子进程退出 kill函数raise函数示例--使用kill函数给指定进程发…

基于python+django+vue的学生成绩管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于协同过滤pythondjangovue…