安卓:以编程方式的波纹背景
2022-09-03 14:45:29
我目前正在创建一个Android应用程序,有人可以输入他们的名字,按下一个按钮,然后它只是将他们的名字输出回给他们。
我想用这个实现的一个效果是,在他们按下按钮后,输入和按钮将消失(到目前为止完成这一点),然后MainActivity视图的背景颜色将用新颜色产生波纹(从中心开始),最终改变完整的背景颜色。
我该如何以编程方式执行此操作,因为我只能在按下按钮时找到有关向按钮添加波纹的教程?
我目前正在创建一个Android应用程序,有人可以输入他们的名字,按下一个按钮,然后它只是将他们的名字输出回给他们。
我想用这个实现的一个效果是,在他们按下按钮后,输入和按钮将消失(到目前为止完成这一点),然后MainActivity视图的背景颜色将用新颜色产生波纹(从中心开始),最终改变完整的背景颜色。
我该如何以编程方式执行此操作,因为我只能在按下按钮时找到有关向按钮添加波纹的教程?
编辑:
我通过制作一个小应用程序对此进行了测试
首先,隐藏要在此动画中显示的视图。
视图可以来自相同的布局,在 xml 中,其可见性应该是不可见的,以便动画显示它。
如果要创建全屏动画,则可以将视图高度和宽度设置为与父级匹配...
在框架布局中拍摄原始视图并显示视图
在我的情况下,我用了这个:
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:text="Hello World!"
android:layout_width="wrap_content"
android:textSize="20sp"
android:layout_height="wrap_content" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryDark"
android:id="@+id/revealiew"
android:visibility="invisible"
>
</FrameLayout>
然后在您的活动或某些事件上执行以下操作:button click
fab.setOnClickListener(new View.OnClickListener() {
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onClick(View view) {
// previously invisible view
View myView = findViewById(R.id.revealview);
// get the center for the clipping circle
int cx = myView.getWidth() / 2;
int cy = myView.getHeight() / 2;
// get the final radius for the clipping circle
int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
// create the animator for this view (the start radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
//Interpolator for giving effect to animation
anim.setInterpolator(new AccelerateDecelerateInterpolator());
// Duration of the animation
anim.setDuration(1000);
// make the view visible and start the animation
myView.setVisibility(View.VISIBLE);
anim.start();
}
});
}
您可以在此处详细了解官方文档:http://developer.android.com/training/material/animations.html
您描述的是背景上的显示效果。
从官方文档中,您可以找到现成的示例:
1)以下是如何使用显示效果来显示以前不可见的视图:
// previously invisible view
View myView = findViewById(R.id.my_view);
// get the center for the clipping circle
int cx = myView.getWidth() / 2;
int cy = myView.getHeight() / 2;
// get the final radius for the clipping circle
int finalRadius = Math.max(myView.getWidth(), myView.getHeight());
// create the animator for this view (the start radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(myView, cx, cy, 0, finalRadius);
// make the view visible and start the animation
myView.setVisibility(View.VISIBLE);
anim.start();
2)以下是使用显示效果隐藏以前可见的视图的方法:
// previously visible view
final View myView = findViewById(R.id.my_view);
// get the center for the clipping circle
int cx = myView.getWidth() / 2;
int cy = myView.getHeight() / 2;
// get the initial radius for the clipping circle
int initialRadius = myView.getWidth();
// create the animation (the final radius is zero)
Animator anim =
ViewAnimationUtils.createCircularReveal(myView, cx, cy, initialRadius, 0);
// make the view invisible when the animation is done
anim.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
myView.setVisibility(View.INVISIBLE);
}
});
// start the animation
anim.start();
在你的应用中,你可以使用彩色背景图层(在开始时不可见),然后对其使用显示效果。