Android 顶部悬浮栏 + ViewPager + RecyclerView
来源:互联网 发布:python append extend 编辑:程序博客网 时间:2024/06/06 11:48
今天写代码遇到一个问题,在ScrollView中加入ViewPager和RecyclerView list数据显示不完整,而且界面想要实现顶部悬浮的导航栏,所以我们只有重写ScrollView,受到@dyy_csdn的分发事件的启示,由于发生了控件的滑动冲突,所以我们要解决冲突,怎么解决呢?在@dyy_csdn的分发事件这篇博客中有详细提到过,所以我在此我就不做赘述了。
博客地址:http://blog.csdn.net/dyy_csdn/article/details/60574803
要实现悬浮的导航栏只需要记住两点:
1、导航栏的悬浮其实就是控件的显示与隐藏
2、需要测量滑动的距离,重写ScrollView
创建接口:
public interface ScrollViewListener { void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);}
我们需要重写onScrollChanged这个方法,传入接口参数
@Overrideprotected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); }}接下来我们就要开始写activity了
在onCreate方法中获取控件的宽高是为0的。所以我们应该在控件绘制好之后开始测量,使用如下方法;
ViewTreeObserver vto2 = tab.getViewTreeObserver();vto2.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Overrde public boolean onPreDraw() { if (!hasMeasured1){ tabLayoutHeight = tab.getMeasuredHeight(); tabLayoutTop = tab.getTop(); Log.e("onGlobalLayout","--"+tabLayoutTop+"---"+tabLayoutHeight); hasMeasured1 = true; } return true; }});设置监听事件scrollView.setScrollViewListener(this);
代码中的150是我自己滑动测量的,大家可以根据自己的需要设定不同的值,来显示隐藏导航栏
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) { int[] location = new int[2]; tab.getLocationOnScreen(location); int locationY = location[1]; //Log.e("locationY", locationY + " " + "topHeight的值是:" + (tabLayoutHeight+tabLayoutTop)); if (locationY <= 150 && (tab2.getVisibility() == View.GONE || tab2.getVisibility() == View.INVISIBLE)) { tab2.setVisibility(View.VISIBLE); } if (locationY > 150 && tab2.getVisibility() == View.VISIBLE) { tab2.setVisibility(View.GONE); }}
public class ObservableScrollView extends ScrollView { private int mTouchSlop; private int downX; private int downY; private ScrollViewListener scrollViewListener = null; public ObservableScrollView(Context context) { super(context); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public ObservableScrollView(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public void setScrollViewListener(ScrollViewListener scrollViewListener) { this.scrollViewListener = scrollViewListener; } @Override public boolean onInterceptTouchEvent(MotionEvent e) { int action = e.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: downX = (int) e.getRawX(); downY = (int) e.getRawY(); break; case MotionEvent.ACTION_MOVE: int moveY = (int) e.getRawY(); if (Math.abs(moveY - downY) > mTouchSlop) { return true; } } return super.onInterceptTouchEvent(e); } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); } } public interface ScrollViewListener { void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy); }}
0 0
- Android 顶部悬浮栏 + ViewPager + RecyclerView
- Android RecyclerView 顶部悬浮实现
- Android RecyclerView 顶部悬浮实现
- android RecyclerView首字母悬浮在顶部,滑动删除
- android RecyclerView首字母悬浮在顶部,滑动删除
- RecyclerView实现顶部悬浮条效果 自定义!
- 安卓学习笔记---android RecyclerView首字母悬浮在顶部,滑动删除
- android上使用RecyclerView实现顶部悬浮标题效果的Sticky Title View
- 【Android】RecyclerView:打造悬浮效果
- RecyclerView实现带有头部的顶部悬浮置顶布局
- viewpager+indicator到达顶部时,indicator悬浮效果
- Android 简单实现ListView顶部悬浮效果
- Android ScrollView 上推至顶部使控件悬浮
- Android 简单实现ListView顶部悬浮效果
- Android 简单实现ListView顶部悬浮效果
- Android 简单实现ListView顶部悬浮效果
- Android ScrollView中控件顶部悬浮
- Android 简单实现ListView顶部悬浮效果
- 微信小程序快捷键(来源百度经验)
- Android 自定义实现类似QQ消息贝塞尔拖拽效果BezierView
- 给按钮加前景色和字体大小(Java_Swing)
- 1009. Product of Polynomials (25)
- POJ 3259 Wormholes 最短路径
- Android 顶部悬浮栏 + ViewPager + RecyclerView
- 数据结构-散列
- oracle 远程连接提示 ora-12541错误
- 老男孩OpenStack企业私有云实战培训
- 【BZOJ 4034】【HAOI 2015】树上操作
- ecshop的插入分类sql
- sdut 3260 大数取模
- 运算放大器使用的6个注意事项
- 常用adb命令