Android 仿美团加载界面
来源:互联网 发布:java冒泡排序经典代码 编辑:程序博客网 时间:2024/06/08 12:08
发现有些App在加载页面的时候,直接show了一个ProgressDialog,然后页面就无法进行其他操作了。然而在大部分需求中,我们加载页面的情况下,是希望用户还能进行其他操作的,比如Activity中RadioGroup+Fragment这种场景,每个RadioButton对应一个Fragment,我们希望在Fragment中数据加载的情况下,还能切换fragment,类似于美团加载页面这种效果。
惯例上图
小绿人跑步的动画,参考链接http://blog.csdn.net/u012417984/article/details/49953297
其实就是4张图片组成的一个逐帧动画,考虑到可能有人些只需要加载动画,所以我把这个动画装成了一个自定义View
import android.content.Context;import android.graphics.drawable.AnimationDrawable;import android.util.AttributeSet;import android.view.LayoutInflater;import android.widget.ImageView;import android.widget.LinearLayout;/** * Created by FC小司 on 2016/11/10. */public class MyProgressView extends LinearLayout { private ImageView imagiv; public MyProgressView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context){ LayoutInflater.from(context).inflate(R.layout.dialog_custom_progress, this); imagiv = (ImageView)findViewById(R.id.iv_loading); } public void startprogress(){ ((AnimationDrawable)imagiv.getDrawable()).start(); } public void stopprogress(){ ((AnimationDrawable)imagiv.getDrawable()).stop(); }}
loading的代码:
<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false" > <item android:drawable="@drawable/refresh1" android:duration="80"/> <item android:drawable="@drawable/refresh2" android:duration="80"/> <item android:drawable="@drawable/refresh3" android:duration="80"/> <item android:drawable="@drawable/refresh4" android:duration="80"/></animation-list>
使用也比较简单,在xml使用这个MyProgressView ,代码中调用myprogressview.startprogress()和myprogressview.stopprogress()就可以了。
下面说的是,讲加载动画MyProgressView 封装进一个FrameLayout里,增加实际项目的可用性。嗯哼,既然加载动画都加入了,在同个位置,我们顺势也把加载失败,无数据的效果也添加进来。
import android.content.Context;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.FrameLayout;import android.widget.TextView;/** * Created by FC小司 on 2016/11/21. * 仿美团刷新布局 */public class ProgressFrameLayout extends FrameLayout{ private MyProgressView progressView; private TextView noResultTv; private TextView failTv; private AgainRequestListener mAgainRequestListener; public void setAgainRequestListener(AgainRequestListener listener){ mAgainRequestListener=listener; } public interface AgainRequestListener{ void againRequest(); } public ProgressFrameLayout(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { LayoutInflater.from(context).inflate(R.layout.frame_refresh_layout, this); progressView= (MyProgressView) findViewById(R.id.myprogress_frame); noResultTv= (TextView) findViewById(R.id.tv_no_result); failTv = (TextView) findViewById(R.id.tv_load_fail); failTv.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mAgainRequestListener.againRequest(); } }); } public void showRefresh(){//正在加载 progressView.setVisibility(View.VISIBLE); progressView.startprogress(); noResultTv.setVisibility(View.GONE); failTv.setVisibility(View.GONE); } public void stopRefresh(){//加载成功 progressView.stopprogress(); progressView.setVisibility(View.GONE); noResultTv.setVisibility(View.GONE); failTv.setVisibility(View.GONE); } public void setNoResult(){//暂无数据 progressView.stopprogress(); progressView.setVisibility(View.GONE); noResultTv.setVisibility(View.VISIBLE); failTv.setVisibility(View.GONE); } public void setLoadFail(){//加载失败 progressView.stopprogress(); progressView.setVisibility(View.GONE); noResultTv.setVisibility(View.GONE); failTv.setVisibility(View.VISIBLE); }}
frame_refresh_layout.xml的代码
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <refreshframelayout.com.refreshframelayoutdemo.MyProgressView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myprogress_frame" android:layout_gravity="center"> </refreshframelayout.com.refreshframelayoutdemo.MyProgressView> <TextView android:text="暂无数据" android:padding="30dp" android:id="@+id/tv_no_result" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone"/> <TextView android:text="加载失败" android:padding="30dp" android:id="@+id/tv_load_fail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="gone"/></FrameLayout>
实际项目中,再根据自己的产品需求,修改相应的布局即可,因为手上没有相应的图片,我用TextView代替了加载失败,无数据的图标。代码很简单,主要是给View设置可见与否。当我们加载失败的时候,需要给“加载失败”设置一个点击事件,重新加载页面,这样,我们的一套网络请求流程就下来了。使用如上面的代码,调用ProgressFrameLayout里的相应场景代码。
PS:第一次用MarkDown编辑,希望别乱码。。。。
源码链接 http://download.csdn.net/detail/qq_31390699/9703165
- Android 仿美团加载界面
- Android unity3d 加载界面
- android加载界面
- android界面加载webview
- android欢迎界面动画加载
- Android开发---加载h5界面
- android异步任务加载数据界面实现
- Android App启动出现预加载界面
- Android 7.0Settings加载主界面流程
- Android 用PopupWindow实现加载等待界面
- Android 用Activity实现加载等待界面
- Android 7.0Settings加载主界面流程
- android客户端界面加载处理方法
- 【Android界面实现】使用View Animation实现动画加载界面
- Android实现进入界面时,加载欢迎界面
- Android 加载成功、加载失败、加载中、无数据四个不同界面的切换
- android layout editor加载不出来布局界面
- Android游戏开发之:加载界面的图片
- Access键盘快捷键大全(十四)
- 网络流24题之最小路径覆盖
- python-对象之hashable&unhashable与immutable&mutable
- Access键盘快捷键大全(十五)
- C语言写excel文件(csv格式)
- Android 仿美团加载界面
- 长春社会保险网
- 面试题八-- 软件工程与设计模式
- Linux - apache整合tomcat ( Ubuntu 14.04 x64)
- Access键盘快捷键大全(十六)
- 文章标题
- iOS网络编程之NSStream
- 小库
- HttpClient 网络访问