Android使用View Animation实现动画加载界面

所属分类: 软件编程 / Android 阅读数: 67
收藏 0 赞 0 分享

之前分别介绍了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>

下载:项目地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多