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

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

程序员文章站 2023-12-01 13:23:40
 项目开发中对loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义view来实现这个效果,并且进行封装抽取给项目提供统一的...

 项目开发中对loading的处理是比较常见的,安卓系统提供的不太美观,引入第三发又太麻烦,这时候自己定义view来实现这个效果,并且进行封装抽取给项目提供统一的loading样式是最好的解决方式了。

先自定义一个view,继承自linearlayout,在layout中,添加布局控件

/** 
 * created by xiedong on 2017/3/7. 
 */ 
public class loading_view extends linearlayout { 
  private context mcontext; 
  private relativelayout loading_content; 
  private imageview img; 
  private textview loadingtext; 
  private animationdrawable animationdrawable; 
  public loading_view(context context) { 
    super(context); 
    mcontext = context; 
    setupview(); 
  } 
  public loading_view(context context, attributeset attrs) { 
    super(context, attrs); 
    mcontext = context; 
    setupview(); 
  } 
  public loading_view(context context, attributeset attrs, int defstyleattr) { 
    super(context, attrs, defstyleattr); 
    mcontext = context; 
    setupview(); 
  } 
  private void setupview() { 
//  view view= layoutinflater.from(mcontext).inflate(r.layout.loading_view_layout,this);   //一定要把布局添加进容器,不能为null 
    view.inflate(mcontext, r.layout.loading_view_layout, this); 
    loading_content = (relativelayout) findviewbyid(r.id.loading_content); 
    img = (imageview) findviewbyid(r.id.img); 
    loadingtext = (textview) findviewbyid(r.id.text); 
    img.setimageresource(r.drawable.anim_loading); 
    animationdrawable = ((animationdrawable) img.getdrawable()); 
    animationdrawable.start(); 
  } 
  public void setmessage(string msg) { 
    loadingtext.settext(msg); 
  } 
} 

自定义view的布局文件:

<?xml version="1.0" encoding="utf-8"?> 
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  android:background="#90000000" 
  android:gravity="center"> 
  <relativelayout 
    android:id="@+id/loading_content" 
    android:layout_width="150dp" 
    android:layout_height="120dp" 
    android:background="#40ffffff"> 
    <imageview 
      android:id="@+id/img" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerinparent="true" 
      android:background="@mipmap/ic_launcher" /> 
    <textview 
      android:id="@+id/text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/img" 
      android:layout_centerhorizontal="true" 
      android:text="加载中..." 
      /> 
  </relativelayout> 
</linearlayout> 

这里使用animationdrawable的方式来实现动画效果,animationdrawable的list文件如下:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
  android:oneshot="false"> 
  <item 
    android:drawable="@drawable/loading1" 
    android:duration="100" /> 
  <item 
    android:drawable="@drawable/loading2" 
    android:duration="100" /> 
  <item 
    android:drawable="@drawable/loading3" 
    android:duration="100" /> 
  <item 
    android:drawable="@drawable/loading10" 
    android:duration="100" /> 
</animation-list> 

自定义view部分的工作完成之后,接下来就是如何在项目中具体运用。在相应的布局中使用的时候,一定要记得把此布局文件add进viewgroup中,因为该自定义的view跟调用他的view是独立的两个view,没有完成add的话,loading布局可能不会显示出来。

private loading_view loading_view; 
 loading_view = new loading_view(this); //实例化自定义view 
 loading_view.setmessage("loading文字提示内容...."); 
 //添加当前自定义view进主布局文件 
 addcontentview(loading_view, new viewgroup.layoutparams(viewgroup.layoutparams.match_parent, viewgroup.layoutparams.match_parent)); 

以上所述是小编给大家介绍的android自定义view实现loading动画加载效果,希望对大家有所帮助