参考 :http://blog.csdn.net/qq_20785431/article/details/52528404
![Android 实现类似美团的菜单效果_第1张图片](http://img.e-com-net.com/image/info8/fa46b55e49c946e29b2fef0b88c0ad09.jpg)
滑动后
![Android 实现类似美团的菜单效果_第2张图片](http://img.e-com-net.com/image/info8/a997c124bbc64cc0b104611964296634.jpg)
每次滑动都会显示不同的菜单,下面介绍下如何实现这个效果
实现原理:
将GridView通过Adapter设置给Viewpager,使用Viewpager滑动时动态进行选择相应的GridView,每个GridView数据源有所不同.
MainActivity代码如下:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "LOGGER";
private ViewPager mVpContainer;
private LinearLayout mLlDots;
private GridView mGvGrid;
private LayoutInflater mInflater;
private static final int DEFAULT_PAGE_COUNT = 10;
private String[] mTitles = {"美食", "电影", "酒店住宿", "休闲娱乐", "外卖", "自助餐", "KTV", "机票/火车票", "周边游", "美甲美睫",
"火锅", "生日蛋糕", "甜品饮品", "水上乐园", "汽车服务", "美发", "丽人", "景点", "足疗按摩", "运动健身", "健身", "超市", "买菜",
"今日新单", "小吃快餐", "面膜", "洗浴/汗蒸", "母婴亲子", "生活服务", "婚纱摄影", "学习培训", "家装", "结婚", "全部分配"};
private List
对GridView的Adapter进行一下处理
/**
* Created by shixi_tianrui1 on 16-10-16.
* 在GridView内部设置要显示的菜单项
*/
public class GridViewAdapter extends BaseAdapter {
private static final int DEFAULT_PAGE_COUNT = 10;
private List
对小原点的处理
设置一个pageChangeListener,监听ViewPager的滑动,每次滑动时,将对应位置的小圆点设置为选中
private void setupDots() {
for (int i = 0; i < 4; i++) {
mLlDots.addView(mInflater.inflate(R.layout.view_dots, null));
}
mLlDots.getChildAt(0).setSelected(true);
mVpContainer.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mLlDots.getChildAt(mCurpage).setSelected(false);
mLlDots.getChildAt(position).setSelected(true);
mCurpage = position;
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
原点的样式
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true">
<shape android:shape="oval">
<solid android:color="@color/colorAccent" />
<corners android:radius="8dp" />
shape>
item>
<item android:state_selected="false">
<shape android:shape="oval">
<solid android:color="@color/colorPrimary" />
<corners android:radius="8dp" />
shape>
item>
selector>