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】:
将Button
Gone
设置为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)不起作用