无法在 Android 上使用 LinearLayout 执行 Alpha 动画

Cannot do Alpha Animation with LinearLayout on Android

所以我试图制作一个像 Trello 那样的 ActionButton(点击一个按钮,一个黑色的覆盖层出现,其他按钮出现在屏幕上)。

但我遇到了一个奇怪的问题:我无法使 alpha 动画工作。

我尝试了两种方法:

private void initializeComponent(final Context ctx, final AttributeSet attrs) {
    blackOverlay.setAlpha(0.0f);
    blackOverlay.setVisibility(View.VISIBLE);
    blackOverlay.setClickable(true);

    actionButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            final boolean closed = blackOverlay.getAlpha() == 0.0f;
            blackOverlay.animate().alpha(closed ? 1f : 0f).setDuration(500).setListener(null);
    });
}

因此,通过这种方式,视图 blackOverlay 始终 可见并且动画应该可以正常工作。但事实并非如此。单击按钮不会对 alpha 产生任何影响。唯一的变化是切换按钮使非覆盖内容 work/stop 工作(因为 blackOverlay 是可点击的,所以应该如此)。

所以我尝试了另一种方法:不将 alpha 设置为 0.0f,这样叠加层将开始对用户可见。基本上注释了 initializeComponent 方法的第一行。

private void initializeComponent(final Context ctx, final AttributeSet attrs) {
    //blackOverlay.setAlpha(0.0f);
    blackOverlay.setVisibility(View.VISIBLE);
    blackOverlay.setClickable(true);

    actionButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            final boolean closed = blackOverlay.getAlpha() == 0.0f;
            blackOverlay.animate().alpha(closed ? 1f : 0f).setDuration(500).setListener(null);
        }
    });
}

通过这种方式,按钮仅切换 alpha,它不会激活它。

有什么想法吗?我已经在 Whosebug 上尝试了很多解决方案。

谢谢!

这是我的 xml 布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/blackoverlay"
        android:background="@color/black_overlay">

    </LinearLayout>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/action_button"
        android:layout_gravity="bottom"
        android:src="@drawable/plus"
        android:layout_margin="50dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

好的,所以我按照 karaokyo 的说法做了 MCVE,但有趣的是:它在 MCVE 上有效。

所以我开始查看我的整个代码,我发现我有一个与 action_button 同名的按钮的 setOnClickListener。所以我只是将 ID 更改为不同,现在一切正常。

一看就知道是我不好,我傻哈哈

所以对于正在阅读本文的任何人:尝试从头开始创建一个 MCVE(甚至是新项目),看看它是否有效。可能是其他与您的代码无关的干扰。