任何将ListView的弹跳效果添加到常规scrollview的方法? 通过弹跳我的意思是当你触到列表的底部时橡皮筋就像效果一样。
答案 0 :(得分:18)
将效果反弹添加到android
中的listview第1步:在com.base.view包中创建新文件BounceListView
public class BounceListView extends ListView
{
private static final int MAX_Y_OVERSCROLL_DISTANCE = 200;
private Context mContext;
private int mMaxYOverscrollDistance;
public BounceListView(Context context)
{
super(context);
mContext = context;
initBounceListView();
}
public BounceListView(Context context, AttributeSet attrs)
{
super(context, attrs);
mContext = context;
initBounceListView();
}
public BounceListView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
mContext = context;
initBounceListView();
}
private void initBounceListView()
{
//get the density of the screen and do some maths with it on the max overscroll distance
//variable so that you get similar behaviors no matter what the screen size
final DisplayMetrics metrics = mContext.getResources().getDisplayMetrics();
final float density = metrics.density;
mMaxYOverscrollDistance = (int) (density * MAX_Y_OVERSCROLL_DISTANCE);
}
@Override
protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent)
{
//This is where the magic happens, we have replaced the incoming maxOverScrollY with our own custom variable mMaxYOverscrollDistance;
return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, maxOverScrollX, mMaxYOverscrollDistance, isTouchEvent);
}
}
第2步:在您的布局中,请更改
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
到
<com.base.view.BounceListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
答案 1 :(得分:11)
根据ScrollView
API中的内容,如果您创建扩展onOverScrolled()
类的自定义视图,则应该能够覆盖ScrollView
方法。在快速进行谷歌搜索之后,我遇到了this link,看起来这就是你想要做的......我确实认为这种方法是在Android 2.3.1中添加的,所以你将仅限于设备跑那个。
答案 2 :(得分:5)
我找到了BounceListView的最佳实现(在LGPL许可下)。 这是:https://github.com/Larphoid/android-Overscroll-ListView
答案 3 :(得分:2)
您可能拥有自定义的三星设备。你应该知道弹跳效果不是Android操作系统的默认行为,它是三星引入的(它的实现也很差,它们应该使ScrollView
的行为相同)。在Android 2.3中引入了Overscroll支持,默认行为不是弹跳,而是强烈的光线,其强度与滚动速度/“力”成正比。它可以无处不在(列表视图,滚动视图,网页浏览等)。
总之,你不应该担心这一点。没有简单的论据可以传递给ScrollView
以使其像那样过度滚动。 IMO,并且经历了延长ScrollView
课程的所有麻烦都不值得。只需依靠默认行为。
如果三星希望弄乱他们的用户并给他们一个不一致的用户界面,那么就这样吧。
答案 4 :(得分:0)
对于那些想要对ListView
实施退回效果的人。
添加此效果的一种方法是使用addHeaderView
中的addFooterView
和ListView
及其填充(topPadding
用于标题视图,bottomPadding
用于页脚视图)第一次设置为0
,然后我们覆盖onTouchEvent
,并根据移动距离更改填充。
这个想法是从android-pulltorefresh借来的,因为弹跳效果比拉到刷新更简单,所以代码也更短。 ^ _ ^
希望这会对某人有所帮助..
答案 5 :(得分:0)
对于任何在 NestedScrollView 上寻找反弹效果的人,我制作了一个库: https://github.com/Valkriaine/Bouncy
用法:
在您的应用模块 build.gradle 中:
dependencies {
implementation 'com.factor:bouncy:1.8'
// if you want BouncyRecyclerView too, add implementation for recyclerview
implementation 'androidx.recyclerview:recyclerview:1.1.0'
}
并使用 BouncyNestedScrollView
作为普通的 NestedScrollView:
<com.factor.bouncy.BouncyNestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:fling_animation_size=".7"
app:overscroll_animation_size=".7">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
...
...
</LinearLayout>
</com.factor.bouncy.BouncyNestedScrollView>
fling_animation_size
指定滚动效果的大小,如果没有给定值,则默认为 0.5。
overscroll_animation_size
指定拖动的过度滚动效果的大小,如果没有给定值,则默认为 0.5。
强烈建议将两个值都保持在 5 以下。
BouncyNestedScrollView
是根据 NestedScrollView 的源代码修改的,因此从技术上讲,它应该适用于 NestedScrollView 的所有现有自定义选项。