Android之仿美团加载数据帧动画

一:先来张效果图(这里是GIF动画,我就截屏的所有没有动画,实际是动的):

二:实现步骤:

1、xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">
  <TextView
    android:id="@+id/textview"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:layout_alignParentBottom="true"
    android:layout_margin="20dp"
    android:background="@drawable/animationtk"
    android:gravity="center"
    android:text="点击弹出动画"
    android:textColor="#fff"
    android:textSize="18dp" />
</RelativeLayout>

2.activity代码

package cll.com.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

/**
 * @Description 奔跑小人的动画弹框,可以用作加载数据界面
 * 2017-4-3 http://blog.csdn.net/android_cll
 */
public class RuningManActivity extends Activity implements View.OnClickListener {
  private TextView textview;//点击按钮
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.ac_runing_man);
    initlayout();
  }
  /**
   * 实例化
   */
  private void initlayout() {
    textview = (TextView) findViewById(R.id.textview);
    textview.setOnClickListener(this);
  }
  /**
   * 显示美团进度对话框
   *
   * @param v
   */
  public void showmeidialog(View v) {
    CustomProgressDialog dialog = new CustomProgressDialog(this, "正在加载中......", R.anim.animation);
    dialog.setCanceledOnTouchOutside(false);//设置是否可以点击外部消失
    dialog.setCancelable(false);//设置是否可以按退回键取消
    dialog.show();
  }
  @Override
  public void onClick(View view) {
    switch (view.getId()) {
      case R.id.textview:
        showmeidialog(view);
        break;
    }
  }
}

3.自定义弹框工具类

package cll.com.myapplication;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;
/**
 * @Description:自定义加载数据弹框
 * @author 2017-4-3 http://blog.csdn.net/android_cll
 */
public class CustomProgressDialog extends ProgressDialog {
  private AnimationDrawable mAnimation;
  private ImageView mImageView;
  private String mLoadingTip;
  private TextView mLoadingTv;
  private int mResid;
  public CustomProgressDialog(Context context, String content, int id) {
   super(context);
   this.mLoadingTip = content;
   this.mResid = id;
   setCanceledOnTouchOutside(true);
  }
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   initView();
   initData();
  }
  private void initData() {
   mImageView.setBackgroundResource(mResid);
   // 通过ImageView对象拿到背景显示的AnimationDrawable
   mAnimation = (AnimationDrawable) mImageView.getBackground();
   // 为了防止在onCreate方法中只显示第一帧的解决方案之一
   mImageView.post(new Runnable() {
     @Override
     public void run() {
      mAnimation.start();
     }
   });
   mLoadingTv.setText(mLoadingTip);
  }
  private void initView() {
   setContentView(R.layout.progress_dialog);
   mLoadingTv = (TextView) findViewById(R.id.loadingTv);
   mImageView = (ImageView) findViewById(R.id.loadingIv);
  }
}

4.自定义弹框的xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:orientation="vertical" >
  <ImageView
    android:id="@+id/loadingIv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@anim/animation"/>
  <TextView
    android:id="@+id/loadingTv"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
   android:layout_alignBottom="@+id/loadingIv"
   android:textColor="#fff"
   android:layout_centerHorizontal="true"
   android:textSize="20sp"
    android:text="正在加载中.." />
</RelativeLayout>

5.anim文件下的帧动画文件

<?xml version="1.0" encoding="utf-8"?>
<animation-list
  android:oneshot="false"
  xmlns:android="http://schemas.android.com/apk/res/android"
  >
  <item android:drawable="@mipmap/progress_loading_image" android:duration="150"/>
   <item android:drawable="@mipmap/progress_loading_imagey" android:duration="150"/>
</animation-list>  

到此加载数据弹框的帧动画功能就实现了,不喜勿喷,都有注释就不用解释太多

最后附上源码:http://download.csdn.net/download/android_cll/9802503

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

时间: 2017-04-03

Android帧动画、补间动画、属性动画用法详解

在安卓开发中,经常会使用到一些动画,那么在开发中,如何使用这些动画呢? 帧动画:不是针对View做出一些形状上的变化,而是用于播放一张张的图片,例如一些开机动画,类似于电影播放,使用的是AnimationDrawable来播放帧动画 res/drawable <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.androi

Android 动画(View动画,帧动画,属性动画)详细介绍

0. 前言  Android动画是面试的时候经常被问到的话题.我们都知道Android动画分为三类:View动画.帧动画和属性动画. 先对这三种动画做一个概述: View动画是一种渐进式动画,通过图像的平移.缩放.旋转和透明度等各种渐进式变换完成动画效果. 帧动画是通过不停的切换图片实现动画效果. 属性动画是不停的改变对象的属性来实现动画效果.本文原创,转载请注明出处: http://blog.csdn.net/seu_calvin/article/details/52724655 1.  Vi

android 帧动画,补间动画,属性动画的简单总结

帧动画--FrameAnimation 将一系列图片有序播放,形成动画的效果.其本质是一个Drawable,是一系列图片的集合,本身可以当做一个图片一样使用 在Drawable文件夹下,创建animation-list为根节点的资源文件 <animation-list android:oneshot="false"> <item android:drawable="@drawable/img1" android:duration="100

Android动画之逐帧动画(Frame Animation)实例详解

本文实例分析了Android动画之逐帧动画.分享给大家供大家参考,具体如下: 在开始实例讲解之前,先引用官方文档中的一段话: Frame动画是一系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画.Frame动画可以被定义在XML文件中,也可以完全编码实现. 如果被定义在XML文件中,我们可以放置在/res下的anim或drawable目录中(/res/[anim | drawable]/filename.xml),文件名可以作为资源ID在代码中引用:如果由完全由编码实现,我

Android 帧动画的实例详解

Android 帧动画的实例详解 对于 Android 帧动画 大体上可以理解成 一张张图片 按一定顺序切换, 这样当连续几张图是一组动画时,就可以连起来了看成是一个小电影,你懂得 好得,比就装到这里,下面开始进入正题,由于产品需求 需要做一个 声音喇叭动态切换的样式,我特么第一就想到是帧动画切换,然后就百度了一些资料,发现 真的, 现在这个网上太多的资料是 copy粘贴过来的, 一错全错,对于这种情况我只想说,made,一群垃圾, 所以今天我将带你们走进Android 正确帧动画地址. 第一步

Android编程之简单逐帧动画Frame的实现方法

本文实例讲述了Android编程之简单逐帧动画Frame的实现方法.分享给大家供大家参考,具体如下: 1.逐帧动画 即是通过播放预先排序好的图片来实现动态的画面,感觉像是放电影. 2.实现步骤: ① 在工程里面导入要播放的图片.此简单例子中为start_icon1,2,3. ② 在工程res文件目录下新建一个anim文件夹,在里面新建一个start_animation.xml格式文件,此文件用来定义动画播放图片的顺序及每一张图片显示停留时间. 代码如下: <?xml version="1.

Android动画之逐帧动画(Frame Animation)基础学习

前言 在Android中,动画Animation的实现有两种方式:Tween Animation(补间动画)和Frame Animation(帧动画).渐变动画是通过对场景里的对象不断做图像变换(平移.缩放.旋转等)产生动画效果.帧动画则是通过顺序播放事先准备好的图像来产生动画效果,和电影类似. 下面我们就来学习下Android中逐帧动画的基础知识. 原理 : 人眼的"视觉暂留" 方式 : 1.在java代码中 ( new AnimationDrawable().addFrame(ge

Android 逐帧动画创建实例详解

Android 逐帧动画创建实例详解 前言: 我们看早期电影的时候,电影通常是一张一张播放,用我们现在专有名词来说,就是一帧帧来,安卓同样有这样动画效果的编排形式. 那么我们先定义逐帧动画xml文件 <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://schemas.android.com/apk/res/android" an

Android逐帧动画实现代码

逐帧动画(Frame-by-frame Animations)顾名思义就是一帧接着一帧的播放图片,就像放电影一样.可以通过xml实现也可以通过java代码实现.逐帧动画适合实现比较简单的动画效果,如果要实现复杂动画不太建议使用逐帧动画. xml方式实现: step 1 : 在res/drawable目录下一个文件sample_animlist.xml: <?xml version="1.0" encoding="utf-8"?> <animatio

Android 使用帧动画内存溢出解决方案

Android 使用帧动画内存溢出解决方案 最近在项目遇到的动画效果不好实现,就让UI切成图,采用帧动画实现效果,但是在使用animation-list时,图片也就11张,每张图片大概560k左右,结果内存溢出,崩溃 了,自己用了三张都崩溃:拿代码说: 1.anin_searh.xml <?xml version="1.0" encoding="utf-8"?> <animation-list xmlns:android="http://

Android编程之内存溢出解决方案(OOM)实例总结

本文实例总结了Android编程之内存溢出解决方案(OOM).分享给大家供大家参考,具体如下: 在最近做的工程中发现加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,但自己感觉有点乱,特此,今天在不同型号的三款安卓手机上做了测试,因为有效果也有结果,今天小马就做个详细的总结,以供朋友们共同交流学习,也供自己以后在解决OOM问题上有所提高,提前讲下,片幅有点长,涉及的东西太多,大家耐心看,肯定有收获的,里面的很多东西小马也是学习参考网络资料使用的,先来简单讲下下: 一般我们

JAVA内存溢出解决方案图解

这篇文章主要介绍了JAVA内存溢出解决方案图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.在apache-tomcat-7.0.70\bin\catalina.bat(Linux 系统则在catalina.sh) 文件下的 echo Using CATALINA_BASE: "%CATALINA_BASE%" 上面插入以下代码 set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=256

Android加载图片内存溢出问题解决方法

1. 在Android软件开发过程中,图片处理是经常遇到的. 在将图片转换成Bitmap的时候,由于图片的大小不一样,当遇到很大的图片的时候会出现超出内存的问题,为了解决这个问题Android API提供了BitmapFactory.Options这个类. 2. 由于Android对图片使用内存有限制,若是加载几兆的大图片便内存溢出.Bitmap会将图片的所有像素(即长x宽)加载到内存中,如果图片分辨率过大,会直接导致内存OOM,只有在BitmapFactory加载图片时使用BitmapFact

关于PHP内存溢出问题的解决方法

一.内存溢出解决方案在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出,这里分享一下我的解决方案.还是用例子来说明这个问题,如下:假定日志中存放的记录数为500000条,那么解决方案如下: 复制代码 代码如下: ini_set('memory_limit','64M'); //重置php可以使用的内存大小为64M,一般在远程主机上是不能修改php.ini文件的,只能通过程序设置.注:在safe_mode(安全模式)下,ini_set失效set_time_limit(600);//设置超时限

Android仿微信清理内存图表动画(解决surfaceView屏幕闪烁问题)demo实例详解

最近接了一个项目其中有功能要实现一个清理内存,要求和微信的效果一样.于是想到用surfaceView而不是继承view.下面小编给大家解析下实现思路. surfaceView是为了解决频繁绘制动画产生了闪烁,而采用了双缓冲机制,即A.B两个缓冲轮流显示在画布上,同时,使用不当,同样容易产生闪烁,这是由于A.B中有一个缓冲没有改变. 在我写这个view的时候就遇到了这个问题,研究了好久终于解决. 首先说一下思路: 微信清理缓存的动画是: 一个圆环不停的转动,同时中间有文字显示-->加载完成后,出现

Android 异步获取网络图片并处理导致内存溢出问题解决方法

测试环境为Adnroid 2.1以上. 1.AndroidManifest.xml 权限配置: 添加互联网访问权限: 复制代码 代码如下: <uses-permission android:name="android.permission.INTERNET" /> 2.异步图片类 ImageDownloadTask 复制代码 代码如下: import java.io.ByteArrayOutputStream; import java.io.IOException; imp