Android - 从 Circular Reveal (Lollipop) 中删除背景

标签 android android-animation

我正在将我的应用程序转换为新的 Material Design Pattern,我注意到一个小问题。当我使用 Reveal Effect在 View 在可见和不可见之间转换之前, View 后面有一个白色背景。

目前动画的时候是这样的

开始

start

中间

middle

完成

finish

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <include layout="@layout/actionbar_visualizer" />

    <LinearLayout
        android:id="@+id/visualizerProductContainer"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_below="@id/visualizerActionBar"
        android:background="@color/black"
        android:gravity="left"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/gridHeader"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/fifty_transparent_black"
            android:gravity="center"
            android:padding="10dp"
            android:text="@string/products"
            android:textColor="@color/white" />

        <GridView
            android:id="@+id/productGrid"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:columnWidth="75dp"
            android:numColumns="auto_fit"
            android:paddingTop="10dp"
            android:stretchMode="columnWidth" />
    </LinearLayout>

    ...

</RelativeLayout>

动画

...
mProductContainer = (LinearLayout)findViewById(R.id.visualizerProductContainer);
...

private void showHideProducts() {
    if (mProductContainer.getVisibility() == View.VISIBLE) {
        int cx = (mProductContainer.getLeft() + mProductContainer.getRight()) / 8;
        int cy = (mProductContainer.getTop() + mProductContainer.getBottom()) / 8;

        int initialRadius = mProductContainer.getWidth();

        Animator anim = ViewAnimationUtils.createCircularReveal(mProductContainer, cx, cy, initialRadius, 0);

        anim.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                super.onAnimationEnd(animation);
                mProductContainer.setVisibility(View.GONE);
            }
        });

        anim.start();
    } else {
        int cx = (mProductContainer.getLeft() + mProductContainer.getRight()) / 8;
        int cy = (mProductContainer.getTop() + mProductContainer.getBottom()) / 8;

        int finalRadius = Math.max(mProductContainer.getWidth(), mProductContainer.getHeight());

        Animator anim = ViewAnimationUtils.createCircularReveal(mProductContainer, cx, cy, 0, finalRadius);

        mProductContainer.setVisibility(View.VISIBLE);
        anim.start();
    }
}

那么有没有人知道移除背景/使其在动画之间透明的方法?

最佳答案

ViewAnimationUtils.createCircularReveal 通过在动画期间剪裁给定的 View 来工作。由于您的黑色背景是您 View 的一部分,因此它也会被剪裁。相反,你的黑色背景应该设置在你的 Activity 的主题上(通过 android:background)或者在封装你正在动画的 View 的 View 上(比如你的 RelativeLayout) .

关于Android - 从 Circular Reveal (Lollipop) 中删除背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27536029/

相关文章:

android - 如何使用 ObjectAnimator 去除动画的慢速结束?

java - 为什么 EditText 没有通过 setFillAfter(true) 获得焦点?

java - 暂停和恢复翻译动画

java - Collection 后订阅不起作用

java - 我在使用 android studio 在 java 中设置 TextVIew 时遇到问题

android - 阻止带有输入值的弹出窗口的背景 - 看起来像外部面板的大小

java - Android 返回旧的 Activity

android - 自定义 View 翻译动画在回收器 View 中不起作用

android - AnimationDrawable 以编程方式没有动画列表 xml

android - 我想在我的 android 应用程序中添加我自己的样式弹出对话框,如图所示