NestedScrollView 嵌套 RecyclerView
来源:互联网 发布:mac os x系统重装 编辑:程序博客网 时间:2024/04/30 05:19
NestedScrollView 嵌套 RecyclerView
1、重写 RecyclerView 的 LinearLayoutManager
FullyLinearLayoutManager.class
package com.yungcs.project.myapplication;import android.content.Context;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.util.Log;import android.view.View;import android.view.ViewGroup;/** * Created by yungcs on 2016/1/7. */public class FullyLinearLayoutManager extends LinearLayoutManager { private static final String TAG = FullyLinearLayoutManager.class.getSimpleName(); public FullyLinearLayoutManager(Context context) { super(context); } public FullyLinearLayoutManager(Context context, int orientation, boolean reverseLayout) { super(context, orientation, reverseLayout); } private int[] mMeasuredDimension = new int[2]; @Override public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state, int widthSpec, int heightSpec) { final int widthMode = View.MeasureSpec.getMode(widthSpec); final int heightMode = View.MeasureSpec.getMode(heightSpec); final int widthSize = View.MeasureSpec.getSize(widthSpec); final int heightSize = View.MeasureSpec.getSize(heightSpec); Log.i(TAG, "onMeasure called. \nwidthMode " + widthMode + " \nheightMode " + heightSpec + " \nwidthSize " + widthSize + " \nheightSize " + heightSize + " \ngetItemCount() " + getItemCount()); int width = 0; int height = 0; for (int i = 0; i < getItemCount(); i++) { measureScrapChild(recycler, i, View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED), mMeasuredDimension); if (getOrientation() == HORIZONTAL) { width = width + mMeasuredDimension[0]; if (i == 0) { height = mMeasuredDimension[1]; } } else { height = height + mMeasuredDimension[1]; if (i == 0) { width = mMeasuredDimension[0]; } } } switch (widthMode) { case View.MeasureSpec.EXACTLY: width = widthSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } switch (heightMode) { case View.MeasureSpec.EXACTLY: height = heightSize; case View.MeasureSpec.AT_MOST: case View.MeasureSpec.UNSPECIFIED: } setMeasuredDimension(width, height); } private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec, int heightSpec, int[] measuredDimension) { try { View view = recycler.getViewForPosition(0);//fix 动态添加时报IndexOutOfBoundsException if (view != null) { RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams(); int childWidthSpec = ViewGroup.getChildMeasureSpec(widthSpec, getPaddingLeft() + getPaddingRight(), p.width); int childHeightSpec = ViewGroup.getChildMeasureSpec(heightSpec, getPaddingTop() + getPaddingBottom(), p.height); view.measure(childWidthSpec, childHeightSpec); measuredDimension[0] = view.getMeasuredWidth() + p.leftMargin + p.rightMargin; measuredDimension[1] = view.getMeasuredHeight() + p.bottomMargin + p.topMargin; recycler.recycleView(view); } } catch (Exception e) { e.printStackTrace(); } finally { } }}
2、重写 NestedScrollView (防止 5.0以上机器 滑动冲突问题,实际上是NestedScrollView禁止滑动)
MyNestedScrollView,
package com.yungcs.project.myapplication;import android.content.Context;import android.support.v4.widget.NestedScrollView;import android.util.AttributeSet;import android.view.MotionEvent;import android.view.ViewConfiguration;/** * Created by yungcs on 2016/1/7. */public class MyNestedScrollView extends NestedScrollView { private int downX; private int downY; private int mTouchSlop; public MyNestedScrollView(Context context) { super(context); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MyNestedScrollView(Context context, AttributeSet attrs) { super(context, attrs); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } public MyNestedScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); } @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); }}
mRecyclerView.setNestedScrollingEnabled(false);
源码下载地址:
NestedScrollView 嵌套 RecyclerView
4 0
- NestedScrollView 嵌套 RecyclerView
- NestedScrollView嵌套ListView,RecyclerView
- NestedScrollView嵌套RecyclerView (官方)
- NestedScrollView嵌套RecyclerView滑动冲突
- RecyclerView嵌套在NestedScrollView中的注意事项
- ScrollView/NestedScrollView嵌套RecyclerView滑动不流畅
- NestedScrollview 嵌套 RecyclerView出现滑动冲突解决方法
- RecyclerView嵌套在NestedScrollView中的注意事项
- CoordinatorLayout与NestedScrollView嵌套RecyclerView滑动问题
- 解决nestedScrollview 嵌套 recyclerview出现的异常
- NestedScrollView嵌套RecyclerView滑动卡顿解决方案
- Scrollview (NestedScrollView) 嵌套 RecyclerView 的时候RecyclerView 抢焦点
- 解决NestedScrollView 嵌套 RecyclerView出现的滑动冲突问题
- Android之NestedScrollView 嵌套 RecyclerView 滑动冲突的问题
- NestedScrollView嵌套RecyclerView时滑动不流畅问题的解决办法
- NestedScrollView嵌套RecyclerView时滑动不流畅问题的解决办法
- 从RecyclerView、NestedScrollView源码分析嵌套滑动异常
- CoordinatorLayout与NestedScrollView嵌套RecyclerView使用中的坑
- Linux 配置samba 服务
- 百度上传控件webuploader的上传与修改,Java版本
- 机器学习与数据挖掘网上资源搜罗——良心推荐
- Linux inode 索引节点已满导致服务无法开启的详细解决方法
- python re的几个函数
- NestedScrollView 嵌套 RecyclerView
- 一个手握安兔兔,一个执掌鲁大师,周鸿祎雷军这场仗谁能赢?
- Leetcode218: Maximum Gap
- 整数的应用
- 网站优化的那些事
- Egret)Demo - 抽奖
- Serverlet服务器端模板
- 类 this指针 const成员函数
- 消息队列OSTaskCreate返回值为0 ucosIII