Android中CoordinatorLayout(粘性菜单)的使用
16lz
2021-01-25
CoordinatorLayout简介
CoordinatorLayout是在 Google IO/15 大会发布的,遵循Material 风格,包含在 support Library中,结合AppbarLayout, CollapsingToolbarLayout等 可 产生各种炫酷的效果
CoordinatorLayout简介通常用来 干什么
点击打开链接 Google官方地址
CoordinatorLayout is intended for two primary use cases:
As a top-level application decor or chrome layout
As a container for a specific interaction with one or more child views
简单来说:
- 作为最上层的View
- 作为一个 容器与一个或者多个子View进行交互
下面我来实现一个效果,就是头部是viewPager滚动轮播,中心是菜单栏,菜单栏是粘性的,底部是数据展示,当然了这将会使用到coordinatorLayout让中心菜单栏粘起来,具体看下面的代码吧。。。
xml文件代码
<?xml version="1.0" encoding="utf-8"?>
java代码如下
package com.example.coordinatorlayoutdemo;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ViewPager viewPager;//头布局 private List list;//盛放ImageView的集合 private int[] a = new int[]{R.drawable.andriod, R.drawable.andriod0, R.drawable.andriod2, R.mipmap.ic_launcher}; private TextView tv;//数据列表 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); viewPager = findViewById(R.id.viewpager); tv = findViewById(R.id.tv); initList();//初始化数据源 initVp();//初始化viewpager initEvent();//初始化点击事件 } private void initList() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 50; i++) { sb.append("今天是第" + (i + 1) + "天\n"); } String s = sb.toString(); tv.setText(s); } private void initVp() { list = new ArrayList<>(); for (int i = 0; i < a.length; i++) { View v = View.inflate(this, R.layout.item, null); ImageView mimg = (ImageView) v.findViewById(R.id.img); mimg.setImageResource(a[i]); list.add(mimg); } MyAdapter adapter = new MyAdapter(list); viewPager.setAdapter(adapter); } private void initEvent() { viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); }}
viewPager滑动需要使用适配器代码如下
package com.example.coordinatorlayoutdemo;import android.support.annotation.NonNull;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.view.ViewParent;import android.widget.ImageView;import java.util.List;/** * Created by 亮亮 on 2018/3/27. */public class MyAdapter extends PagerAdapter { private List imgList; public MyAdapter(List imgList){ this.imgList=imgList; } @Override public int getCount() { return imgList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view==object; } @Override public Object instantiateItem(ViewGroup container, int position) { int p=position%imgList.size(); ImageView img=imgList.get(p); ViewParent vp=img.getParent(); if(vp!=null){ ViewGroup parent=(ViewGroup) vp; parent.removeView(img); } container.addView(imgList.get(p)); return imgList.get(p); } @Override public void destroyItem(ViewGroup container, int position, Object object) { int p=position%imgList.size(); container.removeView(imgList.get(p)); }}
下面我们来看下效果吧:
有一个item布局没贴上,好了效果就是你滑动的时候中间的菜单栏可以粘起来是不是很low呢,哈哈哈哈,就这样吧!!!
更多相关文章
- Android自定义控件:Android(安卓)L控件点击水波纹的实现(源码 + De
- Android动画开发之Animation动画效果
- Android: ListView排序及过滤
- Android(安卓)图标外发光
- Android(安卓)多种跑马灯的方法
- 关于android的pan_display
- [Android]使用Dagger 2依赖注入 - 图表创建的性能
- Android学习笔记之:android更新ui的几种常用方法
- 搭建android开发环境所需的工具,以及相应的下载地址