我们都被建议不要使用包含滚动机制的嵌套视图.然而,在最新的Android版本(5.0)中,电话应用程序引起了我的注意,似乎是一个ListView内部ScrollView.
真正引起我兴趣的是滚动机制从无缝切换ScrollView到ListView无缝.
请注意,在实际ListView开始滚动之前,选项卡上方的内容将被推出视图.
我自己试过复制这个,但结果不成功.这是我采取的基本方法......

通过单个连续触摸事件(不抬起手指)......
当用户滚动时,ListView慢慢地覆盖了ImageView.一旦ImageView100%覆盖并ListView占据整个屏幕,就ListView开始滚动.
目前,我正在听触摸事件ListView,如果顶部已经达到了,叫requestDisallowInterceptTouchEvent上ListView,即
@Override
public boolean onTouch(View v, MotionEvent event) {
if (listViewAtTop) {
v.requestDisallowInterceptTouchEvent(true);
} else {
v.requestDisallowInterceptTouchEvent(false);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
只有当您抬起手指并继续滚动时,切换滚动上下文才有效.
是否有不同的方法可以达到预期的效果?
Android 5.0 Lollipop(API 21)添加了嵌套滚动支持.
据我所知,ListView(AbsListView)和ScrollView现在都支持此功能(如果在API 21上运行),但必须在滚动视图上启用它.
有两种方法,通过调用 setNestedScrollingEnabled(true)或使用布局属性android:nestedScrollingEnabled ="true"(未记录)
要了解它的工作原理,或者为自定义小部件支持此功能,关键方法如下:
不幸的是,没有任何指南或培训可以解释除了JavaDoc本身以外它是如何工作的,而JavaDoc本身相当轻,并且除了ScrollView之外没有其他示例.
将最新的支持包"com.android.support:support-v4:22.1.1"添加到您的项目中.试试这个:
<android.support.v4.widget.NestedScrollView
android:id="@+id/nScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<FrameLayout ...>
<ListView ... />
</FrameLayout >
</android.support.v4.widget.NestedScrollView>
Run Code Online (Sandbox Code Playgroud)
默认情况下,嵌套滚动为"已启用".
| 归档时间: |
|
| 查看次数: |
19505 次 |
| 最近记录: |