之前分别介绍了view animation和Drawable Animation,学了就要用啊,今天给大家一个使用View Animation实现动画加载界面的实现。
首先先看一下实现效果。

下面是实现代码
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: 动画加载Dialog * @author zhaokaiqiang * @date 2014-10-27 下午4:42:52 * */ public class LoadingDialog extends Dialog { protected static final String TAG = "LoadingDialog"; // 动画间隔 private static final int DURATION = 800; // 前景图片 private ImageView img_front; // 定时器,用来不断的播放动画 private Timer animationTimer; // 旋转动画 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(); // 从左到右的旋转动画,设置旋转角度和旋转中心 animationL2R = new RotateAnimation(0f, -90f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // 设置动画的运行时长 animationL2R.setDuration(DURATION); // 动画运行结束之后,保存结束之后的状态 animationL2R.setFillAfter(true); // 设置重复的次数 animationL2R.setRepeatCount(1); //设置重复模式为逆运动 animationL2R.setRepeatMode(Animation.REVERSE); // 执行间隔任务,开始间隔是0,每隔DURATION * 2执行一次 animationTimer.schedule(new TimerTask() { @Override public void run() { handler.sendEmptyMessage(1); } }, 0, DURATION * 2); } @Override protected void onStop() { super.onStop(); animationTimer.cancel(); } }
当然,除了这种直接使用代码的硬编码方式,哦们还可以使用xml的方式,和硬编码基本类似,把需要的属性在xml里面定义好即可,下面的代码实现。
<?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: 动画加载Dialog
* @author zhaokaiqiang
* @date 2014-10-27 下午4:42:52
*
*/
public class LoadingDialog extends Dialog {
protected static final String TAG = "LoadingDialog";
// 动画间隔
private static final int DURATION = 800;
// 前景图片
private ImageView img_front;
// 定时器,用来不断的播放动画
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);
// 执行间隔任务,开始间隔是0,每隔DURATION * 2执行一次
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> <!-- 是否浮现在activity之上 --> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
下载:项目地址
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持华域联盟。
声明:本站(华域联盟www.cnhackhy.com)所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

评论(0)