电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android實現啟動頁倒計時效果

瀏覽:4日期:2022-09-19 11:45:33

今天介紹一個很簡單的倒計時動畫,仿酷狗音樂的啟動頁倒計時效果,也是大多數APP在用的一個動畫,來看看效果圖:

Android實現啟動頁倒計時效果

整體的思路就是用一個平滑的幀動畫來畫圓弧就行了。

這篇文章學到什么?

了解屬性動畫ValueAnimator的用法

了解動畫屬性插值Interpolator,讓動畫過度得更自然

如何畫圓弧

開始準備

新建一個類繼承TextView,因為中間還有跳過的文本,所以選擇用TextView來畫個動起來的背景圖。

/** * 倒計時文本 */@SuppressLint('AppCompatCustomView')public class CountDownTextView extends TextView { // 倒計時動畫時間 private int duration = 5000; // 動畫掃過的角度 private int mSweepAngle = 360; // 屬性動畫 private ValueAnimator animator; // 矩形用來保存位置大小信息 private final RectF mRect = new RectF(); // 圓弧的畫筆 private Paint mBackgroundPaint; public CountDownTextView(Context context) {this(context, null); } public CountDownTextView(Context context, AttributeSet attrs) {this(context, attrs, 0); } public CountDownTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(); } private void init() {// 設置畫筆平滑mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 設置畫筆顏色mBackgroundPaint.setColor(Color.WHITE);// 設置畫筆邊框寬度mBackgroundPaint.setStrokeWidth(5);// 設置畫筆樣式為邊框類型mBackgroundPaint.setStyle(Paint.Style.STROKE); }}開始動畫

原理:利用圓的360度角來做屬性動畫,讓它平滑的分配做每幀動畫的角度值,然后調用invalidate()來重繪自己本身,從而進入到本身的onDraw()方法來畫圖。

/** * 開始倒計時 */ public void start() {// 在動畫中if (mSweepAngle != 360) return;// 初始化屬性動畫animator = ValueAnimator.ofInt(mSweepAngle).setDuration(duration);// 設置插值animator.setInterpolator(new LinearInterpolator());// 設置動畫監聽animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) {// 獲取屬性動畫返回的動畫值mSweepAngle = (int) animation.getAnimatedValue();// 重繪自己invalidate(); }});// 開始動畫animator.start(); }畫圓弧

畫圓弧比較簡單, 從效果圖來看,有的同學可能剛開始以為要畫兩個圓,一個背景的內圓和一個白色邊框的大圓,其實這里可以利用畫筆設置畫筆樣式paint.setStyle()和寬度大小paint.setStrokeWidth()的特性來實現。代碼很簡單,開始的角度選擇-90,從頭頂開始畫。這樣實現的是一個順時針的倒計時效果。如果你想實現酷狗的逆時針效果,就控制mSweepAngle的值用mSweepAngle = 360 - mSweepAngle開始就可以了。

@Override protected void onDraw(Canvas canvas) {int padding = dp2px(4);mRect.top = padding;mRect.left = padding;mRect.right = getWidth() - padding;mRect.bottom = getHeight() - padding;// 畫倒計時線內圓canvas.drawArc(mRect, //弧線所使用的矩形區域大小-90, //開始角度mSweepAngle, //掃過的角度false, //是否使用中心mBackgroundPaint); // 設置畫筆super.onDraw(canvas); }

什么是插值動畫?

為了讓動畫過度的更加自然或者添加一些動畫效果,比如勻速運動、加速運動、減速運動、彈跳運動等等,這些的動畫的效果就是靠插值來實現的。在Android中系統內置了一些插值,更加直觀的展示下面介紹的動畫效果。

插值 說明 LinearInterpolator 以常量速率改變 BounceInterpolator 動畫結束的時候彈起 CycleInterpolator 動畫循環播放特定的次數,速率改變沿著正弦曲線 DecelerateInterpolator 在動畫開始的地方快然后慢 OvershootInterpolator 向前甩一定值后再回到原來位置 AccelerateInterpolator 在動畫開始的地方速率改變比較慢,然后開始加速 AnticipateInterpolator 開始的時候向后然后向前甩 AccelerateDecelerateInterpolator 在動畫開始與介紹的地方速率改變比較慢,在中間的時候加速 AnticipateOvershootInterpolator 開始的時候向后然后向前甩一定值后返回最后的值

項目使用

這里要定義文本的寬高,因為沒有畫底部的黑色圓背景,還要設置一下背景圖。

<com.example.viewdemo.CountDownTextViewandroid: android:layout_width='40dp'android:layout_height='40dp'android:layout_gravity='center'android:background='@drawable/bg_count_down'android:text='跳過'android:textColor='#ffffff'android:textSize='12sp'android:visibility='visible' />背景圖

<?xml version='1.0' encoding='utf-8'?><selector xmlns:android='http://schemas.android.com/apk/res/android'> <item android:state_pressed='true'><shape android:shape='oval'> <solid android:color='#302d2d2d' /></shape> </item> <item><shape android:shape='oval'> <solid android:color='#7F2d2d2d' /></shape> </item></selector>完整代碼

/** * 倒計時文本 */@SuppressLint('AppCompatCustomView')public class CountDownTextView extends TextView { // 倒計時動畫時間 private int duration = 5000; // 動畫掃過的角度 private int mSweepAngle = 360; // 屬性動畫 private ValueAnimator animator; // 矩形用來保存位置大小信息 private final RectF mRect = new RectF(); // 圓弧的畫筆 private Paint mBackgroundPaint; public CountDownTextView(Context context) {this(context, null); } public CountDownTextView(Context context, AttributeSet attrs) {this(context, attrs, 0); } public CountDownTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(); } @Override protected void onDraw(Canvas canvas) {int padding = 5;mRect.top = padding;mRect.left = padding;mRect.right = getWidth() - padding;mRect.bottom = getHeight() - padding;// 畫倒計時線內圓canvas.drawArc(mRect, //弧線所使用的矩形區域大小-90, //開始角度mSweepAngle, //掃過的角度false, //是否使用中心mBackgroundPaint); // 設置畫筆start();super.onDraw(canvas); } private void init() {// 設置畫筆平滑mBackgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);// 設置畫筆顏色mBackgroundPaint.setColor(Color.WHITE);// 設置畫筆邊框寬度mBackgroundPaint.setStrokeWidth(5);// 設置畫筆樣式為邊框類型mBackgroundPaint.setStyle(Paint.Style.STROKE); } /** * 開始倒計時 */ public void start() {// 在動畫中if (mSweepAngle != 360) return;// 初始化屬性動畫animator = ValueAnimator.ofInt(mSweepAngle).setDuration(duration);// 設置插值animator.setInterpolator(new LinearInterpolator());// 設置動畫監聽animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) {// 獲取屬性動畫返回的動畫值mSweepAngle = (int) animation.getAnimatedValue();// 重繪自己invalidate(); }});// 開始動畫animator.start(); }}

以上就是Android實現啟動頁倒計時效果的詳細內容,更多關于Android 啟動頁倒計時的資料請關注好吧啦網其它相關文章!

標簽: Android
相關文章:
主站蜘蛛池模板: 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 领袖户外_深度旅游、摄影旅游、小团慢旅行、驴友网 | 播音主持培训-中影人教育播音主持学苑「官网」-中国艺考界的贵族学校 | 钢结构厂房造价_钢结构厂房预算_轻钢结构厂房_山东三维钢结构公司 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 闭端端子|弹簧螺式接线头|防水接线头|插线式接线头|端子台|电源线扣+护线套|印刷电路板型端子台|金笔电子代理商-上海拓胜电气有限公司 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 低噪声电流前置放大器-SR570电流前置放大器-深圳市嘉士达精密仪器有限公司 | 热处理温控箱,热处理控制箱厂家-吴江市兴达电热设备厂 | 热回收盐水机组-反应釜冷水机组-高低温冷水机组-北京蓝海神骏科技有限公司 | 空压机网_《压缩机》杂志| 采暖炉_取暖炉_生物质颗粒锅炉_颗粒壁炉_厂家加盟批发_烟台蓝澳采暖设备有限公司 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 保健品OEM贴牌代加工厂家_德州健之源| 工业车间焊接-整体|集中除尘设备-激光|等离子切割机配套除尘-粉尘烟尘净化治理厂家-山东美蓝环保科技有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 【法利莱住人集装箱厂家】—活动集装箱房,集装箱租赁_大品牌,更放心 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 黑龙江「京科脑康」医院-哈尔滨失眠医院_哈尔滨治疗抑郁症医院_哈尔滨精神心理医院 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 球形钽粉_球形钨粉_纳米粉末_难熔金属粉末-广东银纳官网 | 井式炉-台车式回火炉-丹阳市电炉厂有限公司 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 天然鹅卵石滤料厂家-锰砂滤料-石英砂滤料-巩义东枫净水 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 知企服务-企业综合服务(ZiKeys.com)-品优低价、种类齐全、过程管理透明、速度快捷高效、放心服务,知企专家! | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 散热器-电子散热器-型材散热器-电源散热片-镇江新区宏图电子散热片厂家 | 直流电能表-充电桩电能表-导轨式电能表-智能电能表-浙江科为电气有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 丹佛斯压力传感器,WISE温度传感器,WISE压力开关,丹佛斯温度开关-上海力笙工业设备有限公司 | 新密高铝耐火砖,轻质保温砖价格,浇注料厂家直销-郑州荣盛窑炉耐火材料有限公司 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 能量回馈_制动单元_电梯节能_能耗制动_深圳市合兴加能科技有限公司 | MVR蒸发器厂家-多效蒸发器-工业废水蒸发器厂家-康景辉集团官网 | 华夏医界网_民营医疗产业信息平台_民营医院营销管理培训 |