博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android手写状态切换布局
阅读量:6842 次
发布时间:2019-06-26

本文共 3128 字,大约阅读时间需要 10 分钟。

实现状态切换布局

img_2c0a8d63364bb2a3beb1082c64f97772.png
image

效果图

img_6b23090d49db14f866045ce2c3574632.gif
image

原理

继承RelativeLayout,然后向其中添加各种状态的View,通过对各种View的显示隐藏的切换来实现各种状态的切换。

实现过程

1.继承RelativeLayout,这里通过构造方法之间的调用来简化实例化需要写的代码

public class LoadingLayout extends RelativeLayout {public LoadingLayout(Context context) {    this(context,null);}public LoadingLayout(Context context, @Nullable AttributeSet attrs) {    this(context, attrs,0);}public LoadingLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {    super(context, attrs, defStyleAttr);}

}

2.添加设置状态View的方法,以及盛放状态View的集合

private View LoadingView,SuccessView,FaildView;private ArrayList
views;public void setStatusView(View loadingView, View successView, View faildView){ if(views==null){ views=new ArrayList<>(); }else if(views.size()>0){ views.clear(); } if(getChildCount()>0){ removeAllViews(); } LoadingView=loadingView; SuccessView=successView; FaildView=faildView; LoadingView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); SuccessView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); FaildView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); addView(LoadingView); addView(SuccessView); addView(FaildView); views.add(LoadingView); views.add(SuccessView); views.add(FaildView);}

3.添加隐藏状态View的方法

private void HideViews(){    if(views!=null&&views.size()>0){        for(View v:views){            v.setVisibility(GONE);        }    }}

4.添加设置状态的方法,这里使用enum来对状态进行判断

public void setStatus(LoadingType loadingType){    //在设置之前先将所有View隐藏    HideViews();    switch (loadingType){        case LOADING:            if(LoadingView!=null){                LoadingView.setVisibility(VISIBLE);            }            break;        case SUCCESS:            if(SuccessView!=null){                SuccessView.setVisibility(VISIBLE);            }            break;        case FAILD:            if(FaildView!=null){                FaildView.setVisibility(VISIBLE);            }            break;    }}public enum LoadingType{    LOADING,SUCCESS,FAILD}

5.在布局文件中使用LoadingLayout

6.在Activity中实现逻辑

public class MainActivity extends AppCompatActivity {private LoadingLayout mLoadingLayout;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    mLoadingLayout=findViewById(R.id.myloadlayout);    //添加状态View    mLoadingLayout.setStatusView(View.inflate(this,R.layout.view_loading,null),View.inflate(this,R.layout.view_success,null),View.inflate(this,R.layout.view_faild,null));}public void onClick(View view){    switch (view.getId()){        case R.id.bt_loading:            mLoadingLayout.setStatus(LoadingLayout.LoadingType.LOADING);            break;        case R.id.bt_success:            mLoadingLayout.setStatus(LoadingLayout.LoadingType.SUCCESS);            break;        case R.id.bt_faild:            mLoadingLayout.setStatus(LoadingLayout.LoadingType.FAILD);            break;    }}}

转载地址:http://ohdul.baihongyu.com/

你可能感兴趣的文章
struts2标签常用
查看>>
SecureCRT 绝佳背景字体配色方案, 保护你的眼睛
查看>>
Python3中request模块访问网页以及客户端伪装
查看>>
lvm lvextend vgdisplay xfs_growfs
查看>>
中文图片验证码
查看>>
堡垒机
查看>>
puppet一键部署lnmt
查看>>
Flex 动态创建 多个曲线图/柱形图 ColumnSeries
查看>>
http中post和get的区别
查看>>
从硬盘安装ubuntu的方法
查看>>
TCPDUMP中文手册
查看>>
apache 403 forbidden 错误解决方法
查看>>
ERP实施流程-步骤
查看>>
谈Excel的一些操作
查看>>
24.NAT地址转换技术
查看>>
mahout所实现的算法
查看>>
MFC中的CListCtrl网格控件添加行
查看>>
orzdba安装与使用
查看>>
Ansible API 2.0的测试
查看>>
LVS的三种负载均衡技术,八大负载调度算法
查看>>