Android中将ImageView的setAlpha应用于CollapsingToolbarLayout时无效。

5

在CollapsingToolbarLayout的ImageView中,我需要设置setAlpha(float)方法,以便在向上和向下滚动时使用:

以下是获取偏移量并通过偏移量计算float的方法:

AppBarLayout.OnOffsetChangedListener:

 @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
        float offsetAlpha = (float) (verticalOffset / appBarLayout.getTotalScrollRange());
        imageView.setAlpha(offsetAlpha);
    }

XML布局:

 <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolbarLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="50dp"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:contentScrim="@android:color/transparent">

      <ImageView
                    android:id="@+id/imageView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_gravity="center"
                    android:scaleType="centerCrop"
                    app:layout_collapseMode="parallax" />

 </android.support.design.widget.CollapsingToolbarLayout>

但是setAlpha不起作用。为什么?
2个回答

18

你的计算结果只有0.0或1.0。
我尝试通过获取完整滚动区域的分数来计算偏移量。

这只是一个开始,还有待改进。

appbar.addOnOffsetChangedListener(new OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(final AppBarLayout appBarLayout, final int verticalOffset) {
        float offsetAlpha = (appBarLayout.getY() / appbar.getTotalScrollRange());
        imageView.setAlpha( 1 - (offsetAlpha * -1));
    }
})

把它乘以负一的想法对我非常有用……谢谢 :) - Jimit Patel

1

我知道这是一个非常老的问题,已经有一个被接受的答案,但我发现了一种更好的方法来解决它,因为Tim的解决方案不从0.0到1.0开始

override fun onOffsetChanged(appBarLayout: AppBarLayout, verticalOffset: Int) {
    val offsetAlpha =
        1F - ((appBarLayout.totalScrollRange + verticalOffset).toFloat() / appBarLayout.totalScrollRange.toFloat())
    imageView.setAlpha(offsetAlpha);
}

AppToolbarLayout完全展开时,imageView将会完全消失,如果你想要反转这个效果,只需从offsetAlpha中删除1F -即可。


这个解决方案更好地发挥了作用。谢谢。 - Farzad

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