使滚动条从代码中闪烁(如iOS flashScrollIndicators)

时间:2013-03-09 12:11:27

标签: android scrollbar scrollview

在iOS中,flashScrollIndicators类上有UIScrollView方法,允许您像第一次显示视图时那样使滚动条短暂闪烁。

我在文档中找不到与此等效的Android,使滚动条在可滚动视图(ScrollView,ListView,WebView等)上短暂闪烁。我尝试在视图上发出requestLayout(),但这不起作用。

我问这个的原因是因为我的观点包含在ViewPager中,当用户滑动到另一个页面时,该页面经常已被绘制并且不会闪烁滚动条。 / p>

在这里回答我自己的问题

该方法称为awakenScrollBars,在View类中定义。不幸的是,该方法是protected,因此您必须子类化ScrollView,ListView或任何您希望其滚动条闪烁的视图。

或者, public 方法scrollToscrollBy也会闪烁滚动条,但前提是滚动位置实际已更改。所以f.e. listView.scrollBy(0,0)无效,listView.scrollTo(0,0)仅在视图未位于顶部时才有效。

如果无法对视图进行子类化,则以下似乎可行,但不可否认,这是一种黑客行为:

view.setVisibility(View.INVISIBLE);
view.setVisibility(View.VISIBLE);

将视图设置为不可见然后立即再次显示似乎不会导致任何重绘,但它具有触发滚动条闪烁的副作用。

2 个答案:

答案 0 :(得分:5)

我通过强迫它在彼此之后直接向上和向下滚动来解决类似的问题。

scrollView.scrollBy(0, 1);
scrollView.scrollBy(0, -1);

这会导致滚动视图显示垂直滚动条,除非没有可滚动的内容。

答案 1 :(得分:0)

我尝试先设置isScrollbarFadingEnabled = false来强制滚动条出现,然后再滚动一点,然后再滚动isScrollbarFadingEnabled = true使其消失。

下面在Kotlin中的代码:

scrollview.isScrollbarFadingEnabled = false
        handler.postDelayed(Runnable {
            scrollview.isScrollbarFadingEnabled = true
            scrollview.scrollBy(1, 0)
        }, 600)