广告
返回顶部
首页 > 资讯 > 移动开发 >Android自定义View实现APP启动页倒计时效果
  • 555
分享到

Android自定义View实现APP启动页倒计时效果

2024-04-02 19:04:59 555人浏览 安东尼
摘要

Android自定义View实现APP启动页倒计时效果,供大家参考,具体内容如下 之前也是做过APP启动页的倒计时效果,但是只有文字变化,没有动画效果,这次通过使用自定义View控件

Android自定义View实现APP启动页倒计时效果,供大家参考,具体内容如下

之前也是做过APP启动页的倒计时效果,但是只有文字变化,没有动画效果,这次通过使用自定义View控件来制作一个带有动画效果的倒计时。

倒计时效果的基本思路如下:

canvas提供了绘制弧形的方法,drawArc(),使用这个方法通过定时刷新计算当前弧形的角度,就可以模拟出倒计时的动画效果,同时借助drawText()方法可以实现倒计时文字。
(1)继承View
(2)使用canvas的drawArc()来绘制弧形,模拟动画效果
(3)使用canvas的drawText()来绘制倒计时文字
(4)向外部(Activity或者Fragment)提供接口,倒计时结束之后通过接口告诉外部

具体看代码:

首先定义当前view的宽度和高度的默认值,并重写onMeasure()方法,否则在布局文件中即使使用wrap_content当前view也会布满全屏

 //当前view高度和宽度的默认值
 private static final int DEFAULT_WIDTH = 100;
 private static final int DEFAULT_HEIGHT = 100;

定义三个变量,分别是倒计时总长度,当前剩余倒计时长度,以及剩余时间比例,根据这个比例绘制弧形划过的角度

private int countDownTime = 5000;//倒计时的时间,默认是5秒
private int countDownNow = 5000;//当前的时间,默认也是5秒
private float timeTatio = 1f;//剩余时间比例,默认为1

定义画笔以及向外部提供的接口

使用Android提供的倒计时类,如果不使用这个类,也可以通过thread+handler实现,初始化这个类需要传入两个参数,第一个参数是倒计时总长度,第二个参数是倒计时间隔,也就是每隔多长时间停止一次。这个类重写了两个方法,第一个方法是倒计时暂停的时候需要执行的操作,第二个方法是倒计时完全结束之后需要执行的操作,在这里,我设置了每隔10ms暂停一次,计算剩余时间的比例并重新绘制整个view,倒计时完全结束后通过接口告诉外部。

private Paint paint;
    private ViewCountDownFinishListener viewCountDownFinishListener;
    //倒计时,每隔100毫秒倒计时一次
    private CountDownTimer countDownTimer = new CountDownTimer(countDownTime,10) {
        @Override
        public void onTick(long l) {
            LogUtils.logI("倒计时:"+l);
            countDownNow = (int) l;
            //计算比例
            timeTatio = (float) countDownNow / (float)countDownTime;
            invalidate();
        }

        @Override
        public void onFinish() {
            countDownTimer.cancel();
            if(viewCountDownFinishListener != null){
                viewCountDownFinishListener.countDownFinish();
            }
        }
    };

在构造方法中调用init()方法以启动倒计时

private void init(){
        if(countDownTimer != null) {
            countDownTimer.start();
        }
    }
//设置倒计时完成的接口
    public void setViewCountDownFinishListener(ViewCountDownFinishListener viewCountDownFinishListener){
        this.viewCountDownFinishListener = viewCountDownFinishListener;
    }

重写onDraw()方法,根据
canvas.drawArc(float left,float top,float right,float bottom,float startAngle,float sweepAngle,boolean useCenter, Paint paint)
参数说明:
前四个参数表明当前的弧形所在的椭圆,只要设置椭圆宽度和高度一样,就是一个圆了,
startAngle是开始绘制的角度,以正右方向(X轴正方向)为0都,顺时针为正度数,逆时针为负度数,这里我设置从-90°(也就是Y轴负方向)开始,
sweep是指弧形划过的角度,这里我设置的是从0开始一直划过360度,刚好画一个圆,但是其实并没有完全到360度,因为我设置了每隔10ms执行一次,最后并不会完全是360度,但是非常接近,几乎看不出来。
useCenter表示是否连接到圆心,如果连接到圆心,就是扇形,这里需要弧形,就选择false

绘制完弧形后开始绘制倒计时文字,这个比较简单,就是计算倒计时剩余时间就可以了,然后绘制出来。

protected void onDraw(Canvas canvas) {
        LogUtils.logI("onDraw()方法执行");
        super.onDraw(canvas);
        paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(2);
        paint.setAntiAlias(true);
        //根据比例绘制一个扇形,也就是一个圆形
        //当前的弧度
        float currentRadian = 360 - 360 * timeTatio;


        canvas.drawArc(10,10,60,60,-90,currentRadian,false,paint);
        //绘制文字
        paint.reset();
        paint.setStyle(Paint.Style.FILL);
        paint.setColor(Color.parseColor("#3399ff"));
        paint.setAntiAlias(true);
        paint.setTextSize(30);
        canvas.drawText(String.valueOf((int) (countDownNow/1000)),27,45,paint);
    }

重写onMeasure()方法,为了将View显示在正确的位置上。

//重写onMeasure方法
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        setMeasuredDimension(measureSpecHandler(widthMeasureSpec,DEFAULT_WIDTH),measureSpecHandler(heightMeasureSpec,DEFAULT_HEIGHT));
    }

    //计算高度和宽度的具体值
    private int measureSpecHandler(int measureSpec,int defaultSize){
        int result = defaultSize;
        int specModel = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);
        switch(specModel){
            case MeasureSpec.EXACTLY:
                result = specSize;
                break;

            case MeasureSpec.AT_MOST:
                result = Math.min(result,specSize);
                break;

            default:
                result = defaultSize;
                break;

        }
        return result;
    }

定义接口,向外部提供倒计时完成的通知信息

 //定义一个接口,当倒计时完成之后通知activity做出相应改变
    public interface ViewCountDownFinishListener{
        void countDownFinish();
    }

在xml中直接使用:

<FrameLayout xmlns:android="Http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.fanjuan.project.wisdomclass.activity.ActivityMain">

    <com.fanjuan.project.wisdomclass.view.CountDownView
        android:id="@+id/cv_count_down"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="20dp"
        android:layout_marginTop="20dp" />

</FrameLayout>

在activity中使用:

 protected void initView() {
        countDownView = findViewById(R.id.cv_count_down);
    }

    @Override
    protected void initListener() {
        super.initListener();
        countDownView.setViewCountDownFinishListener(new CountDownView.ViewCountDownFinishListener() {
            @Override
            public void countDownFinish() {
                ToastUtils.toastInfo("倒计时结束");
            }
        });
    }

最后的效果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: Android自定义View实现APP启动页倒计时效果

本文链接: https://www.lsjlt.com/news/138699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android自定义View实现APP启动页倒计时效果
    Android自定义View实现APP启动页倒计时效果,供大家参考,具体内容如下 之前也是做过APP启动页的倒计时效果,但是只有文字变化,没有动画效果,这次通过使用自定义View控件...
    99+
    2022-11-13
  • Android实现启动页倒计时效果
    目录开始准备 开始动画画圆弧项目使用背景图完整代码今天介绍一个很简单的倒计时动画,仿酷狗音乐的启动页倒计时效果,也是大多数APP在用的一个动画,来看看效果图: 整体的思路就是用一个...
    99+
    2022-11-12
  • Android自定义View实现时钟效果
    本文实例为大家分享了Android自定义View实现时钟效果的具体代码,供大家参考,具体内容如下 自定义时钟 初学自定义View,先画一个不太成熟的时钟(甚至只有秒针) 时钟效果 ...
    99+
    2022-11-12
  • Android 自定义View之倒计时实例代码
    Android 自定义View之倒计时实例代码 需求: 大多数app在注册的时候,都有一个获取验证码的按钮,点击后,访问接口,最终用户会收到短信验证码。为了不多次写这个获取验...
    99+
    2022-06-06
    倒计时 view 自定义view Android
  • 怎么在Android中实现一个启动页倒计时效果
    本篇文章为大家展示了怎么在Android中实现一个启动页倒计时效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统...
    99+
    2023-06-14
  • Android自定义View实现拖动自动吸边效果
    本文实例为大家分享了Android自定义View实现拖动自动吸边的具体代码,供大家参考,具体内容如下 自定义View,一是为了满足设计需求,二是开发者进阶的标志之一。随心所欲就是我等...
    99+
    2022-11-13
  • Android自定义view实现滑动解锁效果
    本文实例为大家分享了Android自定义view实现滑动解锁的具体代码,供大家参考,具体内容如下 1. 需求如下: 近期需要做一个类似屏幕滑动解锁的功能,右划开始,左划暂停。 2. ...
    99+
    2022-11-12
  • Android自定义View实现动画效果详解
    目录帧动画补间动画属性动画帧动画 帧动画就是给定一个完整动画的所有关键帧,由大脑想象中间的变化过程的一种动画。 <xml version="1.0" encoding="utf...
    99+
    2023-02-02
    Android自定义View实现动画 Android 动画 Android自定义View
  • android自定义view实现钟表效果
    本文实例为大家分享了android view实现钟表的具体代码,供大家参考,具体内容如下 先看效果图: 自定义view大家肯定已经不陌生了,所以直接今天直接步入正题:如何利用...
    99+
    2022-06-06
    view Android
  • Android自定义View实现扫描效果
    本文实例为大家分享了Android自定义View实现扫描效果的具体代码,供大家参考,具体内容如下 演示效果如下: 实现内容: 1、控制动画是竖向或者横向 2、控制动画初始是从底部/...
    99+
    2022-11-12
  • android实现App活动定时自动跳转效果
    App的小功能点,很简单几十行代码就可以实现 主页面代码 package com.buildingbuilding; import android.content.Inte...
    99+
    2022-06-06
    自动跳转 自动 app Android
  • Android 自定义view实现水波纹动画效果
    在实际的开发中,很多时候还会遇到相对比较复杂的需求,比如产品妹纸或UI妹纸在哪看了个让人兴奋的效果,兴致高昂的来找你,看了之后目的很明确,当然就是希望你能给她;在这样的关键时候,身子板就一定得硬了,可千万别说不行,爷们儿怎么能说不行呢;好了...
    99+
    2023-05-31
    android 水波纹 roi
  • Android自定义view利用PathEffect实现动态效果
    目录前言一、首先介绍下PathEffect的一些子类二、看看子类具体的一些代码三、案例实现(CornerPathEffect,PathDashPathEffect,ComposePa...
    99+
    2022-11-13
  • Android自定义View实现loading动画加载效果
     项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的lo...
    99+
    2022-06-06
    view loading Android
  • Android自定义TimeButton实现倒计时按钮
    项目需要要实现一个带有倒计时功能的按钮,其效果类似发送验证码之后在按钮上显示倒计时并且将按钮设置为不可用的功能。 为了项目中其他地方能够调用到,便重写了一个继承于Button的...
    99+
    2022-06-06
    倒计时 按钮 Android
  • Android中自定义view实现侧滑效果
    效果图: 看网上的都是两个view拼接,默认右侧的不显示,水平移动的时候把右侧的view显示出来。但是看最新版QQ上的效果不是这样的,但给人的感觉却很好,所以献丑来一发比较高...
    99+
    2022-06-06
    view 自定义view Android
  • Android自定义Animation实现View摇摆效果
    使用自定义Animation,实现View的左右摇摆效果,如图所示: 代码很简单,直接上源码 activity_maini.xml布局文件: <?xml v...
    99+
    2022-06-06
    view animation Android
  • Android自定义View实现折线图效果
    下面就是结果图(每种状态用一个表情图片表示): 一、主页面的布局文件如下: <RelativeLayout xmlns:android="http://schema...
    99+
    2022-06-06
    折线图 view Android
  • Android自定义View实现打字机效果
    一、先来看看效果演示 二、实现原理: 这个其实不难实现,通过一个定时器不断调用TextView的setText就行了,在setText的时候播放打字的音效。 具体代码如下:...
    99+
    2022-06-06
    view 打字机 Android
  • Android自定义view实现输入框效果
    本文实例为大家分享了Android自定义view实现输入框的具体代码,供大家参考,具体内容如下 自定义输入框的View package com.fenghongzhang.day...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作