Android 水波纹效果

今天翻看博客,发现了水波纹效果。顺便研究了一下

一,Touch Feedback(触摸反馈)

 1,原始自带效果

Android 水波纹效果_第1张图片

代码:

    

录制视频到时候发现原生的下面两个录制不出来效果,所以自定义了一下效果颜色

    
    

2 自定义。主要用到了ripple这个属性。这个属性是api21之后才有的,所以要在res下建drawable-v21,在drawable下建press.xml



    
    

在drawable-v21下建press.xml


    
        
            
        
    

其中这个是指定水波纹的颜色 item里不指定内容也可以,在ripple试试指定radius。

Reveal effect(揭示效果)

看效果

Android 水波纹效果_第2张图片

代码

public class MainActivity extends AppCompatActivity {

    private View view;
    private double radio;
    private boolean isOn = true;//记录view的状态,第一次进去是可见的,记为true,不可见记为false

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        view = findViewById(R.id.view);
        findViewById(R.id.bt_action).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                createAnimation(view).start();
            }
        });


    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    public Animator createAnimation(View v) {

        Animator animator;
        if (radio == 0L) {
            radio = Math.sqrt(Math.pow(view.getWidth(), 2) + Math.pow(view.getHeight(), 2));
        }
        if (isOn) {
            animator = ViewAnimationUtils.createCircularReveal(
                    v,// 操作的视图
                    0,// 动画开始的中心点X
                    0,// 动画开始的中心点Y
                    (float) radio,// 动画开始半径
                    0);// 动画结束半径
        } else {
            animator = ViewAnimationUtils.createCircularReveal(
                    v,// 操作的视图
                    0,// 动画开始的中心点X
                    0,// 动画开始的中心点Y
                    0,// 动画开始半径
                    (float) radio);// 动画结束半径
        }
        animator.addListener(new Animator.AnimatorListener() {
            @Override
            public void onAnimationStart(Animator animation) {
                if (!isOn) {
                    view.setVisibility(View.VISIBLE);
                }
            }

            @Override
            public void onAnimationEnd(Animator animation) {
                if (isOn) {
                    view.setVisibility(View.INVISIBLE);
                }
                isOn = !isOn;
            }

            @Override
            public void onAnimationCancel(Animator animation) {

            }

            @Override
            public void onAnimationRepeat(Animator animation) {

            }
        });
        animator.setInterpolator(new DecelerateInterpolator());
        animator.setDuration(500);
        return animator;
    }
}

主要API

ViewAnimationUtils.createCircularReveal(
View view,//目标view
int centerX,//开始动画的起点x坐标(相对于目标view而言)
int centerY,//开始动画的起点y坐标(相对于目标view而言)
float startRadius,//初始半径
float endRadius//结束半径
);

总结:第一次写博客,写的很简单,还在摸索中。为了速度,有些样例间接了网上大神

你可能感兴趣的:(Android 水波纹效果)