我正在将我的应用程序转换为新的Material Design Pattern,我注意到了一个小麻烦。当我使用Reveal Effect时,视图后面有一个白色背景,然后在可见和不可见之间转换。
目前看起来像是动画
开始
中东
完成
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();
}
}
那么有没有人知道如何删除背景/使其在动画之间透明?
答案 0 :(得分:4)
ViewAnimationUtils.createCircularReveal
通过在动画期间剪切给定的视图来工作。由于您的黑色背景是视图的一部分,因此它也会被剪裁。相反,您的黑色背景应该在您的活动主题上设置(通过android:background
),或者在封装您正在设置动画的视图的视图上设置(例如您的RelativeLayout
)。