Android使用View Animation實(shí)現(xiàn)動(dòng)畫(huà)加載界面
之前分別介紹了View Animation和Drawable Animation,學(xué)了就要用啊,今天給大家一個(gè)使用View Animation實(shí)現(xiàn)動(dòng)畫(huà)加載界面的實(shí)現(xiàn)。
首先先看一下實(shí)現(xiàn)效果。
下面是實(shí)現(xiàn)代碼
package com.example.animationloading; import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; /** * * @ClassName: com.example.animationloading.LoadingDialog * @Description: 動(dòng)畫(huà)加載Dialog * @author zhaokaiqiang * @date 2014-10-27 下午4:42:52 * */ public class LoadingDialog extends Dialog { protected static final String TAG = "LoadingDialog"; // 動(dòng)畫(huà)間隔 private static final int DURATION = 800; // 前景圖片 private ImageView img_front; // 定時(shí)器,用來(lái)不斷的播放動(dòng)畫(huà) private Timer animationTimer; // 旋轉(zhuǎn)動(dòng)畫(huà) private RotateAnimation animationL2R; @SuppressLint("HandlerLeak") private Handler handler = new Handler() { public void handleMessage(Message msg) { img_front.setAnimation(animationL2R); animationL2R.start(); }; }; public LoadingDialog(Context context) { super(context, R.style.dialog); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_loading); img_front = (ImageView) findViewById(R.id.img_front); animationTimer = new Timer(); // 從左到右的旋轉(zhuǎn)動(dòng)畫(huà),設(shè)置旋轉(zhuǎn)角度和旋轉(zhuǎn)中心 animationL2R = new RotateAnimation(0f, -90f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 設(shè)置動(dòng)畫(huà)的運(yùn)行時(shí)長(zhǎng) animationL2R.setDuration(DURATION); // 動(dòng)畫(huà)運(yùn)行結(jié)束之后,保存結(jié)束之后的狀態(tài) animationL2R.setFillAfter(true); // 設(shè)置重復(fù)的次數(shù) animationL2R.setRepeatCount(1); //設(shè)置重復(fù)模式為逆運(yùn)動(dòng) animationL2R.setRepeatMode(Animation.REVERSE); // 執(zhí)行間隔任務(wù),開(kāi)始間隔是0,每隔DURATION * 2執(zhí)行一次 animationTimer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(1); } }, 0, DURATION * 2); } @Override protected void onStop() { super.onStop(); animationTimer.cancel(); } }
當(dāng)然,除了這種直接使用代碼的硬編碼方式,哦們還可以使用xml的方式,和硬編碼基本類(lèi)似,把需要的屬性在xml里面定義好即可,下面的代碼實(shí)現(xiàn)。
<?xml version="1.0" encoding="utf-8"?> <rotate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="800" android:fillAfter="true" android:fromDegrees="0" android:pivotX="50%" android:pivotY="50%" android:repeatCount="1" android:repeatMode="reverse" android:toDegrees="-90" > </rotate>
如果使用這種方式,那么,上面的代碼就要變成下面這種了。
package com.example.animationloading; import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.animation.Animation; import android.view.animation.AnimationUtils; import android.widget.ImageView; /** * * @ClassName: com.example.animationloading.LoadingDialog * @Description: 動(dòng)畫(huà)加載Dialog * @author zhaokaiqiang * @date 2014-10-27 下午4:42:52 * */ public class LoadingDialog extends Dialog { protected static final String TAG = "LoadingDialog"; // 動(dòng)畫(huà)間隔 private static final int DURATION = 800; // 前景圖片 private ImageView img_front; // 定時(shí)器,用來(lái)不斷的播放動(dòng)畫(huà) private Timer animationTimer; private Animation animation; private Context context; @SuppressLint("HandlerLeak") private Handler handler = new Handler() { public void handleMessage(Message msg) { img_front.setAnimation(animation); animation.start(); }; }; public LoadingDialog(Context context) { super(context, R.style.dialog); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_loading); img_front = (ImageView) findViewById(R.id.img_front); animationTimer = new Timer(); animation = AnimationUtils.loadAnimation(context, R.anim.anim_load_dialog); // 執(zhí)行間隔任務(wù),開(kāi)始間隔是0,每隔DURATION * 2執(zhí)行一次 animationTimer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(1); } }, 0, DURATION * 2); } @Override protected void onStop() { super.onStop(); animationTimer.cancel(); } }
下面是dialog的樣式
<style name="dialog" parent="android:style/Theme.Dialog"> <!-- 背景顏色及透明程度 --> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <!-- 是否浮現(xiàn)在activity之上 --> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
下載:項(xiàng)目地址
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android自定義加載圈動(dòng)畫(huà)效果
- Android實(shí)現(xiàn)笑臉進(jìn)度加載動(dòng)畫(huà)
- Android實(shí)現(xiàn)仿微軟系統(tǒng)加載動(dòng)畫(huà)效果
- android實(shí)現(xiàn)加載動(dòng)畫(huà)對(duì)話(huà)框
- Android 自定義加載動(dòng)畫(huà)Dialog彈窗效果的示例代碼
- android自定義波浪加載動(dòng)畫(huà)的實(shí)現(xiàn)代碼
- Android仿視頻加載旋轉(zhuǎn)小球動(dòng)畫(huà)效果的實(shí)例代碼
- Android 使用 Path 實(shí)現(xiàn)搜索動(dòng)態(tài)加載動(dòng)畫(huà)效果
- Android使用lottie加載json動(dòng)畫(huà)的示例代碼
- Android實(shí)現(xiàn)仿iOS菊花加載圈動(dòng)畫(huà)效果
相關(guān)文章
Android應(yīng)用的多語(yǔ)言支持的實(shí)現(xiàn)方法
本篇文章主要介紹了Android應(yīng)用的多語(yǔ)言支持的實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android實(shí)現(xiàn)自動(dòng)點(diǎn)擊無(wú)障礙服務(wù)功能的實(shí)例代碼
這篇文章主要介紹了Android實(shí)現(xiàn)自動(dòng)點(diǎn)擊無(wú)障礙服務(wù)功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04android中ListView多次刷新重復(fù)執(zhí)行g(shù)etView的解決方法
以前倒是沒(méi)有注意listview的getView會(huì)重復(fù)執(zhí)行多次,在測(cè)試的時(shí)候去斷點(diǎn)跟蹤,發(fā)現(xiàn)同一條數(shù)據(jù)不斷的重復(fù)執(zhí)行,下面與大家分享下正確的解決方法,希望對(duì)你有所幫助2013-06-06Android線(xiàn)程中設(shè)置控件的值提示報(bào)錯(cuò)的解決方法
這篇文章主要介紹了Android線(xiàn)程中設(shè)置控件的值提示報(bào)錯(cuò)的解決方法,實(shí)例分析了textview報(bào)錯(cuò)的原因以及Handler設(shè)置來(lái)解決錯(cuò)誤的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06詳解flutter engine 那些沒(méi)被釋放的東西
這篇文章主要介紹了詳解flutter engine 那些沒(méi)被釋放的東西,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07Android 中TextView中跑馬燈效果的實(shí)現(xiàn)方法
這篇文章主要介紹了Android 中TextView中跑馬燈效果的實(shí)現(xiàn)方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02Android中使用Kotlin實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄界面
Kotlin 是一種在 Java 虛擬機(jī)上運(yùn)行的靜態(tài)類(lèi)型編程語(yǔ)言,被稱(chēng)之為 Android 世界的Swift,由 JetBrains 設(shè)計(jì)開(kāi)發(fā)并開(kāi)源。接下來(lái)本文通過(guò)實(shí)例代碼給大家講解Android中使用Kotlin實(shí)現(xiàn)一個(gè)簡(jiǎn)單的登錄界面,一起看看吧2017-09-09Suspend函數(shù)與回調(diào)的互相轉(zhuǎn)換示例詳解
這篇文章主要為大家介紹了Suspend函數(shù)與回調(diào)的互相轉(zhuǎn)換示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01