日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Android實現啟動頁倒計時效果

瀏覽:19日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合激情一区| 午夜在线精品| 三级一区在线视频先锋| 91久久午夜| 婷婷成人av| 国产欧美日韩精品高清二区综合区| 日本高清久久| 欧美激情福利| 九九久久国产| 久久国产日韩| 六月天综合网| 国产精品永久| 99久久婷婷| 亚洲97av| 国产亚洲电影| 午夜欧美在线| 国产精品视频首页| 99国产精品久久久久久久成人热| 日韩动漫一区| 亚洲一级高清| 久久永久免费| 久色成人在线| 成人在线视频免费看| 亚洲视频www| 精品中文字幕一区二区三区 | 亚洲中午字幕| 日本韩国欧美超级黄在线观看| 欧美三区四区| 热久久国产精品| 麻豆成人91精品二区三区| 亚洲一级少妇| 热久久久久久| 久久精品动漫| 91综合久久爱com| 性感美女一区二区在线观看| 久久不射网站| 国产精品久久久免费| 91精品亚洲| 久久精品97| 久久理论电影| 久久不卡国产精品一区二区| 日本不卡免费高清视频在线| 亚洲精品麻豆| 99久久99视频只有精品| 欧美日本三区| 国产一区导航| 精精国产xxxx视频在线野外| 日韩黄色av| 亚洲资源在线| 石原莉奈一区二区三区在线观看| 国产精品18| 国产精品一区二区精品 | 视频一区日韩精品| 精品日韩视频| 久久影院资源站| 日本在线视频一区二区| 蜜臀精品久久久久久蜜臀| 99免费精品| 蜜臀久久精品| 91青青国产在线观看精品| 国产精品多人| 国产美女亚洲精品7777| 日av在线不卡| 日韩精品免费观看视频| 五月婷婷六月综合| 国产成人精品一区二区三区免费| 欧美综合社区国产| 日本视频在线一区| 伊人久久大香线蕉av超碰演员| 国产亚洲久久| 色综合视频一区二区三区日韩| 99re国产精品| 午夜精品久久久久久久久久蜜桃| 国产一区二区三区不卡视频网站 | 精品国产欧美日韩一区二区三区| 日本不卡一二三区黄网| 亚洲精品自拍| 国产亚洲观看| 国产一区二区三区四区五区传媒| 久久不见久久见国语| 视频在线不卡免费观看| 日韩精品一区二区三区免费观影| 99精品在线| 亚洲永久字幕| 日韩精品久久久久久| 久久不卡国产精品一区二区| 成人一区而且| 日韩欧美二区| av不卡免费看| 日韩福利视频网| 荡女精品导航| 亚洲精品网址| 国产探花一区| 99精品在线观看| 亚洲精品乱码日韩| 卡一卡二国产精品| 蜜臀久久精品| 亚洲深夜福利| 久久爱www.| 91精品国产乱码久久久久久久| 免费看日韩精品| 国产中文字幕一区二区三区| 一本大道色婷婷在线| 亚洲综合福利| 在线一区av| 综合激情婷婷| 久久蜜桃资源一区二区老牛| 婷婷综合福利| 久久精品av| 国产成人免费| 69堂免费精品视频在线播放| 欧美成人午夜| 国产成人a视频高清在线观看| 免费在线观看视频一区| 久久久久久久久丰满| 久久97视频| 久久狠狠久久| 精品一区欧美| 天堂√中文最新版在线| 欧美日韩xxxx| 亚洲精品一区二区在线播放∴| 久久蜜桃av| 中文字幕在线看片| 精品三区视频| 国产精品xxxav免费视频| 天堂va欧美ⅴa亚洲va一国产| 激情欧美丁香| 日韩亚洲在线| 中文在线一区| 香蕉精品999视频一区二区| 国产在线不卡| 精品一区毛片| 日韩精品免费一区二区三区| yellow在线观看网址| 欧美好骚综合网| 日韩欧美在线中字| 久久久久国产精品一区三寸 | 精品国产a一区二区三区v免费| 久久久精品区| 97精品国产福利一区二区三区| 国产一区二区三区亚洲| 国产精品高颜值在线观看| 亚洲人成在线网站| 91九色精品| 亚洲一二三区视频| 免费精品视频在线| 日本aⅴ亚洲精品中文乱码| 国产精品红桃| 欧美日韩一区二区三区视频播放| 狠狠久久婷婷| 青青草国产成人99久久| 欧美日韩亚洲一区在线观看| 国产一区二区三区久久久久久久久| 三上悠亚国产精品一区二区三区| 欧美一级精品| 亚洲一区二区av| 国产精品扒开腿做爽爽爽软件| 日韩欧美一区二区三区在线观看 | 激情六月综合| 蜜桃av一区二区| 日韩av三区| 久久天堂精品| 国产日韩欧美一区| 欧美综合另类| 国产日韩欧美一区在线| 亚洲天堂资源| 日韩精品免费视频一区二区三区| 天堂av在线| 国产欧美一区二区色老头| 福利片在线一区二区| 蜜桃av一区二区三区电影| 久久伊人久久| 综合激情在线| 亚洲一级影院| 国产九九精品| 日韩高清二区| 久久久免费人体| 丝袜国产日韩另类美女| 国产精品久久久亚洲一区| 91精品观看| 国内精品伊人| 亚洲毛片视频| av一区在线| 国产在线观看91一区二区三区| 亚洲一级特黄| 欧美国产小视频| 日本三级亚洲精品| 免费日韩av片| 日韩高清不卡| 中文字幕高清在线播放| 国产精品22p| 亚洲精品日韩久久| 老牛国产精品一区的观看方式| 久久国产亚洲| 国产美女高潮在线| 麻豆91在线播放| 欧美黑人巨大videos精品| 日本不卡的三区四区五区| 欧美亚洲色图校园春色| 亚洲人妖在线|