Android自定义控件之3D上下翻页效果的倒计时控件

Android--简易倒计时 阅读详情

这是一个自定义的倒计时控件,具有3D上下翻页翻转效果。最近项目中需要做一个倒计时控件,需要和iOS端的效果保持一样。大致效果是这样的,如下图所示:


由于暂时还不会怎么样制作gif动态图,所以想看具体效果的,可以在下面的源码中下载运行查看。

废话不说了,开干吧。那么是怎么实现呢?我们首先得找到3D翻页的效果,这个效果我是参考的一个github项目,https://github.com/emilsjolander/android-FlipView。

其次,倒计时的逻辑,这个不难,最后是自定义的View了。

下面是动画的效果


1.动画的效果

(1).这里的动画效果是由Scroller类来实现的。

public void startScroll (int startX, int startY, int dx, int dy, int duration)
(2).翻页效果
           主要分为三部分

           |___绘制控件翻转页面的上半部分:

 canvas.clipRect(mTopRect);

           |___绘制控件翻转页面的下半部分: 

canvas.clipRect(mBottomRect);

           |___绘制控件中间的翻页部分:这里利用的是camera类的方法,

camera.rotateX()//看意思就明白表示沿X轴翻转,这是翻转效果的核心方法。
camera.clipRect(mTopRect,mBottom) //根据当前翻转的度数(0~180度),决定画布裁剪部分。
camera.getMatrix(mMatrix) //设置matrix矩阵的值,对中间页进行变形,达到翻页的视觉效果。
//然后通过矩阵变换,绘制视图和控件
mMatrix.preScale(0.25f, 0.25f);
mMatrix.postScale(4.0f, 4.0f);
mMatrix.preTranslate(-getWidth() / 2, -getHeight() / 2);
mMatrix.postTranslate(getWidth() / 2, getHeight() / 2);
canvas.concat(mMatrix) 
drawChild();
其中,控件中间的黑线,也是自定义的一个TextView,因为原生的TextView没有设置文字上画黑线的方法,有画线的方法,但是是跟着字体的颜色变化的,所以不符合需求,需要自定义一下,设置绘画的颜色。

不说了,上代码

clock_view_activity.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:customs="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#3B96FD"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <com.example.timeticker.MyClockView
        android:id="@+id/clockView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="14dp"
        android:background="@mipmap/tcd_timer_bg"
        customs:dayTextBackground="@drawable/time_bg"
        customs:dayTextColor="#ffffff"
        customs:hourTextBackground="@drawable/time_bg"
        customs:hourTextColor="#ffffff"
        customs:minTextBackground="@drawable/time_bg"
        customs:minTextColor="#ffffff"
        customs:secTextBackground="@drawable/time_bg"
        customs:secTextColor="#ffffff" >
    </com.example.timeticker.MyClockView>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="倒计时" />

</LinearLayout>
attrs.xml 自定义的属性
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="MyClock">
        <attr name="dayTextSize" format="dimension" />
        <attr name="hourTextSize" format="dimension" />
        <attr name="minTextSize" format="dimension" />
        <attr name="secTextSize" format="dimension" />
        <attr name="dayTextColor" format="color" />
        <attr name="hourTextColor" format="color" />
        <attr name="minTextColor" format="color" />
        <attr name="secTextColor" format="color" />
        <attr name="dayTextBackground" format="reference|color" />
        <attr name="hourTextBackground" format="reference|color" />
        <attr name="minTextBackground" format="reference|color" />
        <attr name="secTextBackground" format="reference|color" />
    </declare-styleable>
</resources>
ids.xml 因为用到的是动态布局,为了能找到控件,得为每个控件设置一个id

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <item name="dayTextView" type="id" />
     <item name="hourTextView" type="id" />
     <item name="minTextView" type="id" />
     <item name="secTextView" type="id" />
</resources>
time_bg.xml 控件的样式

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <corners android:radius="3dp" />

    <!-- 实心 即填充颜色 -->
    <solid android:color="#0B315C" />
    <!-- 按钮文字和边缘距离(内边距) -->
    <padding
        android:bottom="3dp"
        android:left="6dp"
        android:right="6dp"
        android:top="3dp" />

</shape>
clock_view_bg.xml 控件外框的样式
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/a
2024年安卓最新Android自定义控件之3D上下翻页效果的倒计时控件,2024年最新大厂面试问题 那我们该怎么做才能做到年薪60万+呢,对于程序员来说,只有不断学习,不断提升自己的实力。我之前有篇文章提到过,感兴趣的可以看看,到底要学习哪些知识才能达到年薪60万+。通过职友集数据可以查看,以北京 Android 相关岗位为例,其中 【20k-30k】 薪酬的 Android 工程师,占到了整体从业者的 30.8%!北京 Android 工程师「工资收入水平 」今天重点内容是怎么去学,怎么提高自己的技术。1.合理安排时间2.找对好的系统的学习资料3.有老师带,可以随时解决问题。 阅读详情

相关推荐

数字学习系统压力测试实战:从疫情应急到教育韧性建设

数字学习是教育数字化转型的基础形态,其核心在于保障教学连续性与学习有效性。在突发公共事件等极端场景下,系统需经受网络带宽、终端兼容、教师负荷、家庭支持与心理适配的全链路压力考验。本文基于2800人规模K12学校的72小时紧急上线实践,揭示‘可用性悬崖’原理——即技术方案必须向下兼容老旧设备与弱网环境,而非追求高端功能堆砌;强调‘Complete Analysis’的真实内涵是覆盖真实终端光谱与失败预案验证。内容涵盖分层熔断机制、学习流再造、三段式网络诊断、教师认知减负设计及家庭最小可行支持单元等关键策略,为

weixin_30666401的博客 340

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库02

每个分支下又细分了四个关键方向,并按照“研究对象/焦点、基本问题、核心理论/概念、研究方法、应用/目标、前沿/发展”的框架进行阐述,严格遵循了六级编码体系。在最终整合时,应建立唯一的学科分类编码表(例如,用两位数字或“ART”、“MED”、“ECO”等字母前缀),并确保所有下级编码(尺度、层次、类别、子类、具体项)的逻辑一致性。此回答中的编码为示例,实际系统需据此调整。控制过程(前馈、同期、反馈)、全面质量管理(TQM)、平衡计分卡(BSC)定量(调查、实验)、定性(访谈、民族志)、混合方法、大数据。

weixin_49199313的博客 674

【信息科学与工程学】计算机科学与自动化——第六十三篇 人机交互之前端交互参数知识库01

此方案可满足千万级并发需求,同时支持时序数据、知识图谱和文档数据库的高效处理,通过云原生架构实现极致弹性。​:每月约$15-20万(100节点K8s集群+数据库集群+CDN流量)1. 宠物上架/下架流程。

weixin_49199313的博客 1476

Android倒计时控件:自定义实现与应用

本文还有配套的精品资源,点击获取 简介:在Android开发中,通过自定义控件可以增强用户体验和界面的独特性。本文详细介绍了如何创建一个可自定义的倒计时控件,并应用于多种场景,如在线考试和验证码提示。学习内容包括定义新的View类、实现倒计时逻辑、添加自定义属性和交互反馈,以及通过覆盖onDraw()方法来绘制控件的视觉效果。掌握这些技术将使开发者能够为Android应用设...

weixin_36282234的博客 1491

Android3D翻页效果的倒计时控件

这是一个Android倒计时控件,具有上下翻页的3D翻转效果。 原文地址:http://blog.youkuaiyun.com/android_cmos/article/details/70477285

FlipClockTimer:Android 翻转时钟定时器

翻转时钟定时器 Android 翻转时钟定时器 实现

SystemVue 链路预算、仿真分析步骤

使用SystemVue进行链路预算、频谱分析等,相对ADS更全面。

BeCourageable的博客 3833

麒麟系统grub被锁怎么办?双密码遗忘救援指南(实测V10 SP3版本)

本文详细介绍了麒麟系统V10 SP3版本在GRUB和root密码双遗忘情况下的救援指南。通过ISO镜像进入救援模式,结合单用户模式操作,实现密码重置与系统权限恢复,特别适用于等保合规环境。

384

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

elmos 524系列芯片笔记

芯片的工作工作原理:集成芯片Elmos524.03有发射回路和接收回路,手册有关的内部原理图,大致如下: 芯片会产生固有频率的电压信号,信号通过引脚DRV1、2输出给外部压电陶瓷片,产生固定频率的机械波,也就是所谓的超声波,超声波遇到障碍物时会反射,反射信号经过AINS、D引脚进入芯片,在芯片内部先后经过GAIN放大,滤波然后进入比较器,滤波后的信号(signal)同预先设定的阈值(threshold)比较产生信号输出。此信号最终会连接MCU处理器,需要重点关注。 基于这个内部的工作原

qq_38230916的博客 2483

实战指南:在UE5中高效集成Entt(ECS)框架

本文提供了一份在虚幻引擎5中高效集成Entt ECS框架的实战指南。针对UE5项目在处理大规模动态实体时的性能瓶颈,详细讲解了如何通过数据驱动的ECS架构进行优化。内容包括前期环境准备、核心构建步骤、创建首个ECS子系统以及与UE原生系统的数据同步技巧,旨在帮助开发者快速掌握集成方法,提升游戏逻辑的执行效率。

weixin_29002209的博客 158

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 244

一文读懂5G网络整体架构(接入网+承载网+核心网)

接入网重构分级(分工更细、效率更高)、承载网三段化升级(管道更宽、更智能)、核心网服务化云化(管理更灵活、成本更低)最终实现“成本最优、资源灵活、场景适配”,才能支撑自动驾驶、工业互联网、智慧城市、VR/AR等各种新场景,真正走进我们的生活。

鲸落寰宇 428

Matlab 轴承信号仿真+分析

文章目录项目说明1、信号仿真1.1 仿真公式1.2 信号参数设置1.3 代码实现2、仿真信号分析2.1 小波变换2.2 快速谱峭度 项目说明 本文主要解决两个问题: 1、仿真包含周期性冲击信号、随机干扰冲击信号、调制干扰信号以及随机噪声四个成分的故障轴承信号; 2、使用小波变换以及快速谱峭度对该仿真信号进行分析。 1、信号仿真 1.1 仿真公式 这里的仿真信号公式主要参考了包文杰学者的硕士论文《加权谱峭度故障诊断方法研究与应用》,列举公式如下: 周期性冲击信号仿真 随机干扰冲击信号仿真 调制

cocofisher的博客 9267

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

上一篇: Android中SurfaceView使用详解
下一篇: android matrix 最全方法详解与进阶(完整篇)
android_cmos
博客等级 码龄12年 177粉丝 73原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值