安卓:以编程方式的波纹背景

2022-09-03 14:45:29

我目前正在创建一个Android应用程序,有人可以输入他们的名字,按下一个按钮,然后它只是将他们的名字输出回给他们。

我想用这个实现的一个效果是,在他们按下按钮后,输入和按钮将消失(到目前为止完成这一点),然后MainActivity视图的背景颜色将用新颜色产生波纹(从中心开始),最终改变完整的背景颜色。

我该如何以编程方式执行此操作,因为我只能在按下按钮时找到有关向按钮添加波纹的教程?


答案 1

编辑:

我通过制作一个小应用程序对此进行了测试

首先,隐藏要在此动画中显示的视图。

视图可以来自相同的布局,在 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();
            }
        });
    }

Attached GIF for your reference

您可以在此处详细了解官方文档:http://developer.android.com/training/material/animations.html


答案 2

您描述的是背景上的显示效果

从官方文档中,您可以找到现成的示例:

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();

在你的应用中,你可以使用彩色背景图层(在开始时不可见),然后对其使用显示效果。


推荐