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

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

Android實現啟動頁倒計時效果

瀏覽:20日期: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久久,三上悠亚国产精品一区二区三区
欧美在线影院| 不卡中文一二三区| 成人av动漫在线观看| 久久久久久色| 伊人久久婷婷| 91成人在线网站| 色天使综合视频| 99xxxx成人网| 日本午夜精品一区二区三区电影| 国产精品毛片| 日韩成人一级| 最近高清中文在线字幕在线观看1| 日韩国产欧美三级| 国产在线看片免费视频在线观看| 国产一区三区在线播放| 日本大胆欧美人术艺术动态| 国产aa精品| 欧美日韩国产欧| 精品免费视频| 亚洲欧美日韩视频二区| 91精品福利| 欧美日韩高清| 美女性感视频久久| 精品国产一区二区三区噜噜噜| 久久精品国产久精国产爱| 91精品91| 日韩影院免费视频| 免费视频亚洲| 日韩不卡一二三区| 日韩国产专区| 日韩专区一卡二卡| 亚洲国产成人二区| 免费不卡中文字幕在线| 国产欧美午夜| 成人影视亚洲图片在线| 亚洲欧美一区在线| 欧美三级精品| 国产高清亚洲| 99视频一区| 成人国产综合| 久久91视频| 日韩精品一二三| 日韩亚洲一区在线| 久久av电影| 日本三级亚洲精品| 亚洲日韩视频| 久久国产影院| 国产日韩在线观看视频| 亚洲免费播放| 日韩精品免费一区二区夜夜嗨 | 国产日韩在线观看视频| 日韩精品一卡二卡三卡四卡无卡| 久久只有精品| 日韩av字幕| 欧美日韩一区二区三区不卡视频| 日本在线不卡视频一二三区| 亚洲电影在线一区二区三区| 亚洲专区欧美专区| av不卡在线看| 伊人国产精品| 日韩精选在线| 日本va欧美va精品| 欧美国产美女| 四虎精品一区二区免费| 秋霞影院一区二区三区| 色婷婷色综合| 日日摸夜夜添夜夜添国产精品| 99成人在线视频| 99精品美女| 91精品视频一区二区| 国产高清一区| 国产精品自拍区| 亚洲色图网站| 红桃视频国产精品| 欧美a级一区二区| 欧美成人日韩| 国产精品久久久免费| 国产欧美日韩免费观看| 一区二区视频欧美| 亚州av日韩av| 五月天久久久| 精品午夜av| 成人日韩在线| 老鸭窝亚洲一区二区三区| 国产一卡不卡| 青青草精品视频| 成人免费一区| 蜜臀久久99精品久久久久宅男| 好吊日精品视频| 欧美日韩少妇| 国产探花在线精品| 尤物网精品视频| 日韩综合一区二区三区| 麻豆精品新av中文字幕| 女人天堂亚洲aⅴ在线观看| 欧美性www| 三级欧美韩日大片在线看| 99精品电影| jizzjizz中国精品麻豆| 成人影视亚洲图片在线| 色一区二区三区四区| 国产一区二区三区亚洲| 国产一精品一av一免费爽爽| 免费一级欧美片在线观看网站 | 国产视频一区三区| 国产视频一区免费看| 天堂av一区| 狠狠躁少妇一区二区三区| 久久高清免费| 久久精品国语| 亚洲激情av| 亚洲欧美日韩国产一区| 国产日韩在线观看视频| 欧美日韩水蜜桃| 免费日韩一区二区| 国产日产精品_国产精品毛片 | 亚洲天堂黄色| 91精品一区国产高清在线gif| 久久亚洲精精品中文字幕| 欧美午夜精彩| 中文字幕日韩欧美精品高清在线| 日韩中出av| 欧美日韩色图| 久久狠狠亚洲综合| 免费久久精品视频| 久久久久久美女精品| 午夜在线一区二区| 欧美91在线| 香蕉久久夜色精品国产| 精品国产麻豆| 免费中文字幕日韩欧美| 国产精品对白久久久久粗| 亚洲黄色在线| 亚洲一级少妇| 久久亚州av| 亚洲电影在线| 奇米亚洲欧美| 欧美福利专区| 日韩精品一区二区三区免费视频| 精品色999| 日韩中文字幕av电影| 成人久久一区| 日韩欧美三区| 久久久久亚洲| 免费一级欧美在线观看视频| 久久xxxx| 日韩av在线播放网址| 中文字幕日韩欧美精品高清在线| 99亚洲视频| 欧美日韩免费观看视频| 精品捆绑调教一区二区三区| 国产精品色在线网站| 日韩福利视频一区| 国产精品88久久久久久| 三上悠亚国产精品一区二区三区| a天堂资源在线| 久久久久伊人| 欧美亚洲综合视频| 日韩精品视频一区二区三区| 免费国产自线拍一欧美视频| 午夜久久99| 午夜精品成人av| 偷拍精品精品一区二区三区| 免费高潮视频95在线观看网站| 国产精品草草| 97久久亚洲| 国产精品三p一区二区| 美国欧美日韩国产在线播放| 九色porny丨国产首页在线| 久久这里只有| 美国三级日本三级久久99| 99视频一区| 亚洲三级网站| 国产日产精品_国产精品毛片| 午夜精品影视国产一区在线麻豆| 中文字幕日韩高清在线| 国产模特精品视频久久久久| av不卡免费看| 中文字幕av一区二区三区四区| 色婷婷亚洲mv天堂mv在影片| 99精品电影| 亚洲精品1区2区| 九一精品国产| 欧美天堂视频| 亚洲午夜黄色| 影音先锋久久| 奇米狠狠一区二区三区| 狂野欧美性猛交xxxx| 岛国精品一区| 久久美女精品| 快she精品国产999| 国产毛片久久久| 精品中文字幕一区二区三区 | 久久av影院| 日韩1区2区| 欧美a一区二区| 久久国产精品免费一区二区三区 | 麻豆国产精品777777在线| 日韩精品高清不卡| 久久蜜桃精品|