重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android应用中怎么添加一个联网等待加载动画?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网络空间、网站托管、服务器托管、企业网站设计、砀山网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
一、Android带红点的底部导航拦
1.首先写底部导航栏的界面view_main_tab.xml.
<?xml version="1.0" encoding="utf-8"?>
2.修改底部导航栏的数字,在MainActivity中
/** * -1:表示没有新消息 * -2:表示新消息用红点的方式显示 * 0-99:直接显示数字 * >=100:用99+显示 */ private void messageTips(int num, TextView tv) { if(num==-1){ tv.setVisibility(View.GONE); }else if(num==-2){ tv.setVisibility(View.VISIBLE); tv.setText(""); RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv.getLayoutParams(); layoutParams.height= DensityUtil.dip2px(this,10); layoutParams.width= DensityUtil.dip2px(this,10); tv.setLayoutParams(layoutParams); }else if(num>=0&&num<=99){ tv.setVisibility(View.VISIBLE); tv.setText(num+""); RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv.getLayoutParams(); layoutParams.height= DensityUtil.dip2px(this,16); layoutParams.width= DensityUtil.dip2px(this,16); tv.setLayoutParams(layoutParams); }else if(num>=100){ tv.setVisibility(View.VISIBLE); tv.setText("99+"); RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) tv.getLayoutParams(); layoutParams.height= DensityUtil.dip2px(this,16); layoutParams.width= DensityUtil.dip2px(this,16); tv.setTextSize(DensityUtil.sp2px(this,3)); tv.setLayoutParams(layoutParams); }else{ tv.setVisibility(View.GONE); } }
3.需要在fragment中修改MainActivity中的底部导航拦,所以,要在MainActivity中,写一些公用的方法。
/** * 在oneFragment中更新,底部导航栏的数字 * @param num */ public void updateOne(int num){ messageTips(num,tv_1); } /** * 在TwoFragment中更新,底部导航栏的数字 * @param num */ public void updateTwo(int num){ messageTips(num,tv_2); } /** * 在ThreeFragment中更新,底部导航栏的数字 * @param num */ public void updateThree(int num){ messageTips(num,tv_3); } /** * 在FourFragment中更新,底部导航栏的数字 * @param num */ public void updateFour(int num){ messageTips(num,tv_4); }
4.在fragment中修改底部导航拦,得到主页面,调用主页面的修改方法。
mActivity = (MainActivity) getActivity(); number++; mActivity.updateTwo(number);
二、activity加载动画。
1.activity中的加载动画,要写一个BaseActivity。布局如下
<?xml version="1.0" encoding="utf-8"?>
注意:id为fl_content的FrameLayout的布局里,包含了一个loading_anim的布局,这就是加载布局。加载布局,里面氛围三个线性布局,分别是:加载中布局,加载错误布局,没有数据布局,其中加载失败布局,还需要点击重新加载。内容如下:
<?xml version="1.0" encoding="utf-8"?>
2.Baseactivity的代码太多,讲一下主要的,重写setContentView方法,把新布局放入id为fl_content的布局中,调用getWindow()。setContentView(rootView);剩下的就跟普通个activity操作一样了。
@Override public void setContentView(@LayoutRes int layoutResID) { View rootView = LayoutInflater.from(this).inflate(R.layout.activity_base,null,false); addView = LayoutInflater.from(this).inflate(layoutResID, null, false); //content FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); addView.setLayoutParams(params); fl_content = (FrameLayout) rootView.findViewById(R.id.fl_content); fl_content.addView(addView); getWindow().setContentView(rootView); initView(); showLoading(); }
3.新的activity只需集成BaseActivity,当需要加载成功是,调用loadSuccess()方放,加载失败时调用loadError(),失败后重新加载,需要调用reLoading()重新加载,并调用onRefresh()重新加载数据。如果没有数据调用noData()
三、fragment中加载动画,把加载布局,放入fragment中,我暂时没有好的办法提出BaseFragment进行统一加载。有一些注意事项。
1.viewpager进行布局加载时,最好能够预加载一个屏幕的数据。
vp_main.setOffscreenPageLimit(3);//最好是一屏能显示的fragment数-1。
2.在BaseFragment重写setUserVisibleHint方法,当fragment可见时,才联网加载数据。
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (getUserVisibleHint()){ isVisible=true; onVisible(); }else { isVisible=false; onInvisible(); } }
3.fragment继承BaseFragment需要在onViewCreated中调用一下联网加载方法,因为,setUserVisibleHint执行比较靠前,页面还没有添加到布局,就加载数据,会造成填充数据失败,需要当页面完全添加到布局中,再联网请求。
@Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); mActivity= (MainActivity) getActivity(); showLoading(); lazyLoad(); }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。