Android - 禁用HorizontalScrollView的过度滚动效果

5
我该如何在Android 2.2下禁用HorizontalScrollView的过度滚动?

编辑

我使用反射来实现:

    HorizontalScrollView hh = (HorizontalScrollView) findViewById(R.id.chartHorizontalView);
    viewCls = hh.getClass();
    try {
        Method m = viewCls.getMethod("setOverScrollMode",
                new Class[] { int.class });
        int OVER_SCROLL_NEVER = (Integer) viewCls.getField(
                "OVER_SCROLL_NEVER").get(hh);
        m.invoke(hh, OVER_SCROLL_NEVER);
    } catch (Exception e) {
        e.printStackTrace();
    }
1个回答

7

文档中已经有了,调用setOverScrollMode即可。

在原生AOSP中,直到Gingerbread版本之前都没有过度滚动效果,因此禁用它们的问题似乎不合适。一些制造商添加了自己的过度滚动效果,例如TouchWiz弹跳效果。显然,由于这些效果不是SDK的一部分,因此SDK中没有禁用它们的方法!

截至本文撰写时,Froyo及以下版本占比约为2%。在我看来,明智的做法是针对sdk版本>=9并使用类似以下的东西:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
        horizontalScrollView.setOverScrollMode(View.OVER_SCROLL_NEVER);
    }

这样,大多数用户将看不到动画反弹效果,但是少于2%的运行Froyo TouchWiz的用户仍然会看到弹跳效果。如果你真的、绝对必须禁用所有的动画反弹效果,你可以使用onScrollListener来防止滚动到开始或结束位置,或者使用反射来专门处理TouchWiz,类似于这个示例这个示例


很奇怪,但是Eclipse没有看到这个方法。你确定它在Android 2.2下可用吗? - AYMADA
1
@AYMADA 我已更新答案以解决2.2及以下问题。 - saik0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接