View 在 View.VISIBLE 之后忽略 alpha 值

Posted

技术标签:

【中文标题】View 在 View.VISIBLE 之后忽略 alpha 值【英文标题】:View ignores alpha value after View.VISIBLE 【发布时间】:2016-03-07 09:31:35 【问题描述】:

我有一个按钮,alpha 设置为 0.5,它的可见性在布局中消失了。

 <Button
     android:id="@+id/Button"
     android:layout_
     android:layout_
     android:background="@color/black_color" 
     android:alpha="0.5"
     android:visibility="gone"/>

在某些时候,我希望让它可见(Button.setVisibility(View.VISIBLE);),但是当我这样做时 - 它不是半透明的(0.5)。看起来好像 alpha 设置为 1。

【问题讨论】:

我已经尝试过您发布的代码,最后它似乎工作得很好,您能否发布一些活动代码? 【参考方案1】:

这个问题通常是由于在父视图中有android:animateLayoutChanges="true"。原因是设置可见性的布局动画也改变了view的alpha,覆盖了setAlpha所做的改变。

要解决此问题,您可以从父级中删除 android:animateLayoutChanges="true" 或创建自定义视图以在 onVisibilityChanged 中设置可见性,如下所示:

public class AlphaView extends View 

    private static final String TAG = AlphaView.class.getSimpleName();

    public AlphaView(Context context) 
        super(context);
    

    public AlphaView(Context context, @Nullable AttributeSet attrs) 
        super(context, attrs);
    

    public AlphaView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) 
        super(context, attrs, defStyleAttr);
    

    public AlphaView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) 
        super(context, attrs, defStyleAttr, defStyleRes);
    

    @Override
    protected void onVisibilityChanged(@NonNull View changedView, int visibility) 
        super.onVisibilityChanged(changedView, visibility);

        if (visibility == VISIBLE) 
            setAlpha(0.5f);
        
    

【讨论】:

这就是我所做的,取出 android:animateLayoutChanges="true",因为它出于某种原因将 alpha 设置为 1。 android:animateLayoutChanges="true" 也是我的罪魁祸首。听起来这应该是公认的答案。 这应该是一个可以接受的答案。多谢兄弟。节省了一天【参考方案2】:

ButtonGone设置为Visible后,添加Button的Alpha

喜欢:

buttonObject.setAlpha(.5f);

【讨论】:

试过了,它看起来半透明半秒左右,然后又变成黑色(alpha 1)。 有没有办法在你的代码的另一部分更新? 不。我在一些编辑文本上有一个文本观察器,它改变了该按钮的颜色和不透明度。但是我删除了它。我现在在按钮上明确调用 setVisibility(visible)。 那很好。请问还有问题吗?您可以发布您的文字观察者以获得更好的理解。 删除文本观察器后问题仍然存在,因此它与文本观察器无关..【参考方案3】:

我也遇到了这个问题。这似乎是Android本身的一个错误。我的解决方案是避免设置可见性,并且只调整 alpha。我的视图在 XML 中具有“可见”的可见性,并从 XML alpha 标记值设置为 0.0 开始。然后,当我希望它可见时,我以编程方式调整 alpha:

        dimmerView.setAlpha(.15f);

我通过将 alpha 再次设置为零来消除它。从理论上讲,您可能需要使用 bringToFront 调整 z 轴上的各种视图位置(对于按钮的情况,您可能希望在 alpha 设置为零时删除其侦听器),但在我的实现中似乎没有必要的。

【讨论】:

以上是关于View 在 View.VISIBLE 之后忽略 alpha 值的主要内容,如果未能解决你的问题,请参考以下文章

必须是以下之一:View.VISIBLE、View.INVISIBLE、View.GONE [重复]

如何在 ANDROID 中为 View.GONE 到 View.VISIBLE 的视图设置动画

如何从 View.gone 恢复视图。在xml中使用'android:visibility =“gone”'后setVisibility(View.VISIBLE)不起作用

setVisibility(View.VISIBLE)失效

Android-View是否可见设置

Android-View是否可见设置