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

之前分别介绍了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自定义Animation实现View摇摆效果
  • Android Animation实战之一个APP的ListView的动画效果
  • Android使用glide加载gif动画设置播放次数
  • Android Glide图片加载(加载监听、加载动画)
  • Android实现跳动的小球加载动画效果
  • Android自定义加载loading view动画组件
  • Android自定义加载控件实现数据加载动画
  • Android加载Gif动画实现代码
  • Android自定义view实现阻尼效果的加载动画
  • Android自定义View实现loading动画加载效果
(0)

相关推荐

  • Android自定义Animation实现View摇摆效果

    使用自定义Animation,实现View的左右摇摆效果,如图所示: 代码很简单,直接上源码 activity_maini.xml布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_

  • Android自定义加载loading view动画组件

    在github上找的一个有点酷炫的loading动画https://github.com/Fichardu/CircleProgress 我写写使用步骤 自定义view(CircleProgress )的代码 package com.hysmarthotel.view; import com.hysmarthotel.roomcontrol.R; import com.hysmarthotel.util.EaseInOutCubicInterpolator; import android.ani

  • Android Animation实战之一个APP的ListView的动画效果

    熟悉了基础动画的实现后,便可以试着去实现常见APP中出现过的那些精美的动画.今天我主要给大家引入一个APP的ListView的动画效果: 当展示ListView时,Listview的每一个列表项都按照规定的动画显示出来. 说起来比较抽象,先给大家看一个动画效果,这是APP窝牛装修的ListView显示动画: 有木有觉得很酷炫?有木有啊!? 一.Layout Animation     所谓的布局动画,其实就是为ViewGroup添加显示动画效果,主要用过LayoutAnimationContro

  • Android实现跳动的小球加载动画效果

    先来看看效果图 跳动的小球做这个动画,需掌握: 1.属性动画 2.Path类.Canvas类 3.贝塞尔曲线 4.SurfaceView用法 5.自定义attr属性 6 .架构: 状态模式,控制器 7 .自由落体,抛物线等概念 不多说了,直接上码 1.DancingView.java public class DancingView extends SurfaceView implements SurfaceHolder.Callback { public static final int ST

  • Android使用glide加载gif动画设置播放次数

    在使用glide加载gif动画,有时需要设置播放的次数,然后播放玩一次或者几次之后,需要在播放完做一些其他的操作,直接看代码: Glide.with(this) .load(R.drawable.xiaoguo) .diskCacheStrategy(DiskCacheStrategy.SOURCE) .listener(new RequestListener<Integer, GlideDrawable>() { @Override public boolean onException(Ex

  • Android自定义加载控件实现数据加载动画

    本文实例为大家分享了Android自定义加载控件,第一次小人跑动的加载效果眼前一亮,相比传统的PrograssBar高大上不止一点,于是走起,自定义了控件LoadingView去实现动态效果,可直接在xml中使用,具体实现如下 package com.*****.*****.widget; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.util.

  • Android自定义View实现loading动画加载效果

    项目开发中对Loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义View来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了. 先自定义一个View,继承自LinearLayout,在Layout中,添加布局控件 /** * Created by xiedong on 2017/3/7. */ public class Loading_view extends LinearLayout { private Context m

  • Android自定义view实现阻尼效果的加载动画

    效果: 需要知识: 1. 二次贝塞尔曲线 2. 动画知识 3. 基础自定义view知识 先来解释下什么叫阻尼运动 阻尼振动是指,由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又称减幅振动.衰减振动.[1] 不论是弹簧振子还是单摆由于外界的摩擦和介质阻力总是存在,在振动过程中要不断克服外界阻力做功,消耗能量,振幅就会逐渐减小,经过一段时间,振动就会完全停下来.这种振幅随时间减小的振动称为阻尼振动.因为振幅与振动的能量有关,阻尼振动也就是能量不断减少的振动.阻尼振动是非简谐运

  • Android加载Gif动画实现代码

    Android加载Gif动画如何实现?相信大家都很好奇,本文就为大家揭晓,内容如下 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_he

  • Android Glide图片加载(加载监听、加载动画)

    本文实例为大家分享了Android Glide图片加载的具体代码,供大家参考,具体内容如下 1.普通用法 Glide.with(context) .load(url) .into(view); with中可以放context.activity.fragment..:当放activity.fragment时glide会根据生命周期来加载图片.推荐使用activity. 2.设置加载中和加载失败的图片 Glide.with(context) .load(url) .placeholder(R.dra

随机推荐