在上一篇博客中,我们用自定义View的方式来实现了仿御泥坊(淘宝,360手机卫士等)界面悬停的效果展示,地址如下:点击打开链接
不过自定义的相对来说还是有点复杂的,那么有朋友要问了,有没有更简单一些的实现方式呢?
答案是:有的。今天我们使用Android自带的一些控件来实现界面悬停效果,说实话,必自定义的要好用很多,如果不是追求特别华丽的界面,这些控件基本可以满足我们的需求。
不多说,先上图:
这里还实现了类似于ViewPagerIndictor的效果,可以左右滑动,在滑动过程中,上方的TabLayout也跟随着移动。同时控件内部好像还解决了ViewPager和ScollView的滑动冲突。
下面我们看看布局文件:
这是主界面的布局,最外层一定要是CoordinatorLayout。
ViewPager里面Fragment的布局文件
代码文件:
public class QuanMinActivity extends BaseActivity implements OnTvTabData{
private TabLayout tab;
private ViewPager viewPager;
private List
tabBeen;
private TabLayout top1;
@Override
public int setLayout() {
return R.layout.showing_layout;
}
@Override
public void initView() {
tab = (TabLayout) findViewById(R.id.qm_tabTitle);
viewPager = (ViewPager) findViewById(R.id.qm_viewPager);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar1);
toolbar.setTitle("全民TV");
setSupportActionBar(toolbar);
//设置TabLayout的模式
tab.setTabMode(TabLayout.MODE_SCROLLABLE);
//请求TabLayout数据
GetTvTabData.getTabList(this);
//请求顶部ViewPager等的数据
GetTvTabData.getTopData(this);
}
@Override
public Activity getActivity() {
return QuanMinActivity.this;
}
//TabLayout数据的数据回调
@Override
public void getData(List
tabBeen) {
//将会调过来的数据赋值
this.tabBeen=tabBeen;
}
//顶部ViewPager等的数据回调
@Override
public void getTabData(FiveBean fiveBean) {
//取出ViewPager的数据集合
List
appfocus = fiveBean.getAppfocus();
//创建一个集合用来存放Fragment
ArrayList
fraList = new ArrayList<>();
//存放第一个Fragment,这个Fragment里面有ViewPager等数据,和其他的Fragment不同,单独存放
fraList.add(new FragmentShowing(fiveBean.getAppfocus()));
/**
* 因为是两个回调的数据,所以,需要判断上一个回调中的数据是否请求成功。
* 成功就往存放Fragment的集合中存放剩下的Fragment、设置ViewPager等操作
*/
if(tabBeen!=null){
for (int i = 0; i < tabBeen.size()-1; i++) {
fraList.add(new FragmentOthers());
}
//设置ViewPager适配器
viewPager.setAdapter(new QmTvAdapter(getSupportFragmentManager(),fraList,tabBeen));
//TabLayout关联ViewPager
tab.setupWithViewPager(viewPager);
}
}
}