解决srcollview嵌套recycleview冲突
来源:互联网 发布:剑雨江湖进阶数据2017 编辑:程序博客网 时间:2024/05/16 17:19
正常情况下NestedScrollView嵌套RecycleView,一是会出现只显示一行的情况,二是滑动异常即事件冲突。
解决方法:
1.也是最简单的方法,把design库和V7库升级到23.2以上,注意加上以下代码
1
2
3
4
5
mLinearLayoutManager.setSmoothScrollbarEnabled(
true
);
mLinearLayoutManager.setAutoMeasureEnabled(
true
);
cardslist_view.setLayoutManager(mLinearLayoutManager);
cardslist_view.setHasFixedSize(
true
);
cardslist_view.setNestedScrollingEnabled(
false
);
2.麻烦一点,重写LinearLayoutManager和NestedScrollView。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
public
class
CustomLinearLayoutManager
extends
LinearLayoutManager {
public
CustomLinearLayoutManager(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);
int
width =
0
;
int
height =
0
;
for
(
int
i =
0
; i < getItemCount(); i++) {
if
(getOrientation() == HORIZONTAL) {
measureScrapChild(recycler, i,
View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
heightSpec,
mMeasuredDimension);
width = width + mMeasuredDimension[
0
];
if
(i ==
0
) {
height = mMeasuredDimension[
1
];
}
}
else
{
measureScrapChild(recycler, i,
widthSpec,
View.MeasureSpec.makeMeasureSpec(i, View.MeasureSpec.UNSPECIFIED),
mMeasuredDimension);
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) {
View view = recycler.getViewForPosition(position);
recycler.bindViewToPosition(view, position);
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);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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);
}
}
阅读全文
0 1
- 解决srcollview嵌套recycleview冲突
- 解决RecycleView嵌套RecycleView滑动冲突问题
- 解决Scrollview嵌套recycleview的显示不完全,滑动冲突问题
- Scrollview 嵌套listView 与recycleView 滑动冲突的解决
- Android SrcollView内嵌套ViewPager时的滑动冲突处理
- scrollview与recycleview冲突解决
- 解决ScrollView嵌套recycleview问题
- scrollview嵌套recycleview冲突的问题3
- SrcollView嵌套ListView--android实用技巧
- ListView解决嵌套冲突
- 解决scrollview嵌套recycleview,recycleview抢走滑动事件的问题
- Recycleview嵌套Recycleview时出现的一个问题-待解决
- 解决RecycleView嵌套RecycleView滑动卡顿的问题
- RecycleView和ViewPager冲突解决与原理
- 解决AppBarLayout中的RecycleView的滑动冲突
- 暴力解决recycleview跟scrollview嵌套问题
- 解决NestedScrollView嵌套RecycleView的bug
- 解决NestedScrollView嵌套RecycleView的bug
- Linux基础(四)
- java httpsession强制用户下线
- 【0004】安装win10后,正确删除掉C盘的Windows.old文件夹
- Android车机启动后判断是否存在USB存储设备
- 适配器与Activity之间相互传值
- 解决srcollview嵌套recycleview冲突
- PHP 中对MySql 数据库的增删改查
- 第二行代码第九章笔记
- Hibernate MySql 连接池隔天断开
- Android ADB和shell常用命令
- FFmpeg基本用法
- 使用redis做一次投票活动中tomcat 启动一段时间后死机redis.clients.jedis.exceptions.JedisDataException: value sent to redi
- Mac 环境下svn的安装和使用
- 图像分割评价标准VO&DC的计算方法