Android Material Design动画 Reveal Effect | 揭示效果

Material Design动画 Reveal Effect | 揭示效果

这里写图片描述

核心方法

  ViewAnimationUtils.createCircularReveal(
    View view,//视图将被剪辑到动画圈子
    int centerX,//开始动画的起点x坐标(相对于目标view而言)
    int centerY,//开始动画的起点y坐标(相对于目标view而言)
    float startRadius,//动画圆的起始半径
    float endRadius//动画圆的半径结束
  );

效果图代码实现

1.布局
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/btn_revealeffect"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="展开/收缩"/>

        <ImageView
            android:id="@+id/view_revealeffect"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:src="@drawable/gank"
            android:visibility="invisible"/>

    </LinearLayout>
2.逻辑代码
public class PlayRevealEffect extends MvvmBaseActivity<ActivityPlayRevealEffectBinding> implements View.OnClickListener {

    private boolean isFirst = true;//是否是第一次点击
    private Animator animator;
    private int width;// 屏幕宽度(像素)
    private int height;// 屏幕高度(像素)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_play_reveal_effect);
        GetPiexels();
        bindingView.btnRevealeffect.setOnClickListener(this);
    }

    private void GetPiexels() {
        DisplayMetrics metric = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metric);       
        width = metric.widthPixels;       
        height = metric.heightPixels;
    }

    @Override
    public void onClick(View v) {
                if (isFirst) {
                    animator = ViewAnimationUtils.createCircularReveal(
                            bindingView.viewRevealeffect,
                            width / 2,
                            height / 2,
                            0,
                            height
                    );
                    isFirst = false;
                } else {
                    animator = ViewAnimationUtils.createCircularReveal(
                            bindingView.viewRevealeffect,
                            0,
                            0,
                            height,
                            0
                    );
                    isFirst = true;
                }
                animator.addListener(new Animator.AnimatorListener() {
                    @Override
                    public void onAnimationStart(Animator animation) {
                        if (!isFirst) {
                            bindingView.viewRevealeffect.setVisibility(View.VISIBLE);
                        }
                    }

                    @Override
                    public void onAnimationEnd(Animator animation) {
                        if (isFirst) {
                            bindingView.viewRevealeffect.setVisibility(View.INVISIBLE);
                        }
                    }

                    @Override
                    public void onAnimationCancel(Animator animation) {
                    }

                    @Override
                    public void onAnimationRepeat(Animator animation) {
                    }
                });
                animator.setDuration(500);
                animator.start();
    }
}

完整代码点我下载GitHub

Thank you

  • 以上仅本人学习中遇到的问题,如有更多意见欢迎随时交流 issues
  • email:coderguoy@gmail.com
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值