欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-01-21 10:35:24
一:先来张效果图(这里是gif动画,我就截屏的所有没有动画,实际是动的): 二:实现步骤: 1、xml布局

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

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

二:实现步骤:

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>  

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

最后附上源码:

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