我有一个ScrollView,它正在工作,我能够到达底部并返回顶部。 问题是当用户从屏幕上移开手指时,滚动立即停止。它本来应该更顺畅,而且不会让人疲惫不堪。任何人都可以帮助我吗?
这是我的代码:
XML:
<ScrollView
android:id="@+id/home_content_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/color_background_default"
android:fadingEdgeLength="@dimen/app_fading_edge_length" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/color_background_default"
android:orientation="vertical"
android:padding="@dimen/app_content_padding" >
<!-- Lots of different components here -->
</LinearLayout>
</ScrollView>
我试着去做
scrollView.setSmoothScrollingEnabled(true);
但那也没有用。
另一件事,我展示了一些内容,这些内容是在呈现scrollView的主要内容后异步获取的。其中一些是图像,可能会影响卷轴的总高度...想想我做了
scrollView.refreshDrawableState();
scrollView.requestLayout();
这根本不起作用......
答案 0 :(得分:1)
今天,我遇到了类似的问题。在我的特殊情况下,我在ScrollView中有一个RecyclerView。经过一段时间的试验,我发现ScrollView没有任何问题。这是RecyclerView内部负责的。所以我做到了:
myRecyclerView.setNestedScrollingEnabled(false); /** THIS is the line that makes Recyclerview inside scrollview to scroll smoothly!*/
也许您应该检查其他元素。 Reference
答案 1 :(得分:0)
如果您不喜欢在移除手指以停止滚动时Android如何处理它,您可能会像这样重载该逻辑:
ScrollView myScrollView = (ScrollView) findViewById(R.id.my_scrollview_id);
myScrollView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (mVelocityTracker == null) {
mVelocityTracker = VelocityTracker.obtain();
} else {
mVelocityTracker.clear();
}
mVelocityTracker.addMovement(event);
break;
case MotionEvent.ACTION_MOVE:
mVelocityTracker.addMovement(event);
mVelocityTracker.computeCurrentVelocity(1000);
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
((ScrollView)v).smoothScrollBy(0, (int) (mVelocityTracker.getYVelocity()*myScalarMultiple));
return true;
}
return false;
}
});
我们为ACTION_DOWN和ACTION_MOVE返回“false”,因为我们只想影响速度跟踪器,而不是将触摸事件消耗到ScrollView。您还必须尝试使用myScalarMultiple
的值来获得您喜欢的结果。
答案 2 :(得分:0)
将scrollview包装在布局内,它将顺利运行
下面提供了示例代码供参考
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ScrollView android:id="@+id/scroll_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
</LinearLayout>
</ScrollView>
</LinearLayout>