gpt4 book ai didi

android - Drawable setState 返回 true 但不改变外观

转载 作者:行者123 更新时间:2023-11-30 02:24:54 25 4
gpt4 key购买 nike

我正在使用 ForegroundLinearLayout ( https://github.com/gabrielemariotti/cardslib/blob/master/library-core/src/main/java/it/gmariotti/cardslib/library/view/ForegroundLinearLayout.java )。这是一个非常简单的实现。

但是,我在 RecyclerViews 中放置了一些 ForegroundLinearLayouts,有时(大约 50% 的时间)我的前景的按下状态不会出现,直到 View 被回收(我向下滚动到 View 的第一个屏幕) .

我觉得是mForegroundDrawable.setState(getDrawableState())的问题。

我发现在我的 ForegroundLinearLayouts 中调用了 drawableStateChanged(),当我按下并释放 View 时 getDrawableState() 显示了正确的值,并且 mForegroundDrawable.setState(getDrawableState()) 甚至返回了 true。

即使在 ForegroundLinearLayout 中显式调用 mForegroundDrawable.invalidateSelf() 和 this.invalidate() 也无济于事。

在第一个 View 屏幕上大约有 50% 的时间不会出现按下状态。使用 View 的背景有效,但前景无效。

有人知道什么地方坏了吗?

我真的不想将我所有的 ForegroundLinearLayouts 包装在 FrameLayouts 中。

最佳答案

来得太晚了,但我偶然发现了你在原文中的评论 gist

无需为每个 draw() 设置边界。

正如 corsair992 已经指出的那样,draw() 在大多数情况下已经正确设置了边界。但是,如果 onLayout()draw() 之前被多次调用,用于设置边界的标志 mForegroundBoundsChanged 会被设置为 false 并且边界永远不会设置。我用 DrawerLayout 遇到了这个问题,并在原始要点中留下了评论,但这里有一个简单的解决方法:

@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
if (changed) mForegroundBoundsChanged = true;
}

关于android - Drawable setState 返回 true 但不改变外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28006438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com