如何实现如此长时间的涟漪效应

时间:2017-05-28 21:39:23

标签: android

我对如何为正常按压实现涟漪效果有一些基本的了解。

How to set state_selected in ripple drawable

我想知道,我怎样才能达到如此长时间的涟漪效应。

  1. 按下时突出显示整个项目。
  2. 长时间按下一会儿后,纹波开始从手指按压区域开始传播。
  3. 很难从措辞中清楚地描述。我附上一个视频来展示这种效果。

    https://www.youtube.com/watch?v=ebOYnGM0HCc

    我可以知道如何实现如此长时间的涟漪效应吗?

    这是正常的涟漪效果:https://www.youtube.com/watch?v=OJ_WRFy7pWM

    使用常用方法实现。

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="demo.org.myapplication.MainActivity">
    
        <View
            android:layout_width="250dp"
            android:layout_height="250dp"
            android:clickable="true"
            android:background="?attr/selectableItemBackground" />
    
    </LinearLayout>
    

2 个答案:

答案 0 :(得分:0)

这是材质设计的涟漪效应本身的默认行为。您可以使用xml添加此效果,也可以通过添加视图?attr/selectableItemBackground的背景或前景来简单地添加此效果。请记住,要使其工作,视图必须具有onClickListener设置。否则,您将无法看到效果。

答案 1 :(得分:0)

你可以计算视图的宽度和高度,你可以像下面的代码一样开始动画。这段代码将从中间开始动画。

  button.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            int finalRadius=(int)Math.hypot(v.getWidth()/2,v.getHeight()/2);
            Animator anim= null;
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
                anim = ViewAnimationUtils.createCircularReveal(v,v.getWidth()/2,v.getHeight()/2,0,finalRadius);
                anim.setDuration(400);

                anim.start();
            }
            return true;
        }
    });