CircularReveal
来源:互联网 发布:单片机一键信号发射 编辑:程序博客网 时间:2024/06/05 09:03
final FrameLayout fl_frame = findViewById(R.id.fl_frame); final Button btn_button = findViewById(R.id.btn_button); final DisplayMetrics dm = getResources().getDisplayMetrics(); int w_screen = dm.widthPixels;//屏幕宽度 int h_screen = dm.heightPixels;//屏幕高度 final int x = (int) (dm.widthPixels / dm.density) / 2;//屏幕中心点x final int y = (int) (dm.heightPixels / dm.density) / 2;//屏幕中心点y Log.i(TAG, "屏幕尺寸2:宽度 = " + w_screen + "高度 = " + h_screen + "密度 = " + dm.density); btn_button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CircularReveal.startAnimation(MyApplication.getContext(), fl_frame, x, y, btn_button); } });
import android.animation.Animator;import android.content.Context;import android.os.Build;import android.util.Log;import android.view.View;import android.view.ViewAnimationUtils;import android.widget.Button;import android.widget.FrameLayout;import static android.content.ContentValues.TAG;public class CircularReveal { /** * @param context context * @param frame 执行动画的布局 * @param x x点 * @param y y点 * @param btn 控制动画的按钮 */ public static void startAnimation(final Context context, final FrameLayout frame, int x, int y, final Button btn) { //隐藏 if (frame.getVisibility() == View.VISIBLE) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//>=21 开始动画 final Animator animatorHide = ViewAnimationUtils.createCircularReveal(frame, frame.getWidth() - dip2px(context, x), dip2px(context, y), (float) Math.hypot(frame.getWidth(), frame.getHeight()), 0); animatorHide.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { btn.setClickable(false);//动画开始之后,将按钮设置不可以点击,防止动画中断 } @Override public void onAnimationEnd(Animator animation) { frame.setVisibility(View.GONE);//动画结束之后布局隐藏 btn.setClickable(true);//动画结束之后可以点击 } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); animatorHide.setDuration(3000);//动画时间 animatorHide.start(); } else {//否则将布局直接隐藏 frame.setVisibility(View.GONE); } frame.setEnabled(false); } //显示 else { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//>=21 开始动画 final Animator animator = ViewAnimationUtils.createCircularReveal(frame, frame.getWidth() - dip2px(context, x), dip2px(context, y), 0, (float) Math.hypot(frame.getWidth(), frame.getHeight())); frame.setVisibility(View.VISIBLE); if (frame.getVisibility() == View.VISIBLE) { animator.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animation) { btn.setClickable(false);//动画开始之后不可以点击 } @Override public void onAnimationEnd(Animator animation) { frame.setVisibility(View.VISIBLE);//动画结束之后布局显示 btn.setClickable(true);//动画结束之后可以点击 } @Override public void onAnimationCancel(Animator animation) { } @Override public void onAnimationRepeat(Animator animation) { } }); animator.setDuration(3000);//动画时间 animator.start(); frame.setEnabled(true);//显示时激活 } } else {//否则将布局直接显示 frame.setVisibility(View.VISIBLE); } frame.setEnabled(true); } } public static int dip2px(Context context, float dp) { final float scale = context.getResources().getDisplayMetrics().density; Log.i(TAG, "dip2px: " + (int) (dp * scale + 0.5)); return (int) (dp * scale + 0.5); }}
阅读全文
0 0
- CircularReveal
- AndroidMaterialDesign动画之CircularReveal
- <android5.0>之CircularReveal
- Android 动画-CircularReveal
- Android 5.0 动画之CircularReveal
- 使用CircularReveal动画效果切换页面
- Android CircularReveal揭露动画三种实现
- Android 创建CircularReveal揭露动画的实现
- Android Material Design(6) CircularReveal圆形扩散动画的使用
- android开发游记:meterial design 使用circularReveal仿哔哩哔哩(bilibili)搜索框动画
- android开发游记:meterial design 使用circularReveal仿哔哩哔哩(bilibili)搜索框动画
- LintCode/LeetCode全排列系列问题--Permutations I 和 II, N-Queens I 和 II,数独问题
- thymeleaf的使用笔记
- 10月25日 c语言 读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*
- 实验报告四
- 使用RecyclerView实现购物车
- CircularReveal
- C语言练习题(2)
- android手机客户端测试体系
- MarkDown基本语法
- 1411矩阵取数问题V3
- 简单banner加载网络上的图片
- Java读取properties文件连接数据库
- linux 测试是否能访问端口
- JAVA之Set筛选字符元素