Android:以编程方式提供Ripple背景

时间:2015-10-27 00:51:43

标签: java android xml user-interface

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

我想用此实现的一个效果是,在按下按钮后,输入和按钮将消失(到目前为止完成此位),然后MainActivity视图的背景颜色将执行用新颜色涟漪(从中心),最终改变整个背景颜色。

我将如何以编程方式执行此操作,因为我只能在推送时找到有关向按钮添加涟漪的教程?

3 个答案:

答案 0 :(得分:6)

您所描述的是背景上的reveal effect

从官方文档中,您可以找到准备好使用的示例:

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

在你的应用程序中,你可以使用彩色背景图层(在开头看不见),然后在其上使用显示效果。

答案 1 :(得分:6)

修改

我通过制作一个小应用程序来测试这个

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

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

查看此网站,“Android Ripple Background”是一个库,而min sdk是11(Android 3.0 Honeycomb)
https://android-arsenal.com/details/1/1107