我正在将我的应用程序转换为新的Material Design Pattern,并且注意到了一个小麻烦.当我使用Reveal Effect时,视图后面会出现白色背景,然后在可见和不可见之间切换.
当前动画时看起来像这样
开始
中间
完
XML格式
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
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" >
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" />
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" />
...
动画
...
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来工作.由于您的黑色背景是视图的一部分,因此也会被裁剪.相反,应该在“活动”主题(通过android:background)或封装了您正在制作动画的视图的视图(例如RelativeLayout)上设置黑色背景.
标签:android-animation,android
来源: https://codeday.me/bug/20191028/1955551.html