通过春节的无节操营销,支付宝的咻一咻功能让许多人手酸过、心酸过(没能中敬业福),在吐槽之余好奇的程序员总会猜想这ui怎么实现的呢?

在不看smali代码的情况下应该都会猜想咻一咻的ui实现是这样的:点击一下按钮然后就促发图片(波纹)放大的动画,然后播放“咻咻”的mp3文件。

现在就献上破解之后的代码:

private void waveAnim(Context paramContext, ViewGroup paramViewGroup) {if ((paramContext == null) || (paramViewGroup == null))return;ImageView localImageView = new ImageView(paramContext);localImageView.setImageResource(R.drawable.wave_xiu);RelativeLayout.LayoutParams localLayoutParams = new RelativeLayout.LayoutParams(-2, -2);localLayoutParams.width = this.mBtnXiu.getWidth();localLayoutParams.height = this.mBtnXiu.getHeight();localImageView.setLayoutParams(localLayoutParams);localImageView.setX(this.mBtnXiu.getX());localImageView.setY(this.mBtnXiu.getY());ObjectAnimator localObjectAnimator = ObjectAnimator.ofPropertyValuesHolder(localImageView, new PropertyValuesHolder[]{PropertyValuesHolder.ofFloat("alpha", new float[]{1.0F, 0.0F}), PropertyValuesHolder.ofFloat("scaleX", new float[]{1.2F, 4.0F}), PropertyValuesHolder.ofFloat("scaleY", new float[]{1.2F, 4.0F})});localObjectAnimator.setDuration(1000L);AnimatorSet localAnimatorSet = new AnimatorSet();localAnimatorSet.playTogether(new Animator[]{localObjectAnimator});localAnimatorSet.addListener(new XiuActivity.WaveAnimatarListener(localImageView, paramViewGroup));paramViewGroup.addView(localImageView, 0);localImageView.setVisibility(0);localAnimatorSet.setInterpolator(new LinearInterpolator());localAnimatorSet.start();}
    private static class WaveAnimatarListener implements Animator.AnimatorListener {private View mAniView;private ViewGroup mViewGroup;public WaveAnimatarListener(View view, ViewGroup viewGroup) {mAniView = view;mViewGroup = viewGroup;}@Overridepublic void onAnimationStart(Animator animation) {}@Overridepublic void onAnimationEnd(Animator animation) {if (mAniView != null && mViewGroup != null) {mViewGroup.post(new Runnable() {@Overridepublic void run() {mViewGroup.removeView(mAniView);}});}}@Overridepublic void onAnimationCancel(Animator animation) {}@Overridepublic void onAnimationRepeat(Animator animation) {}}
 mp = MediaPlayer.create(this, R.raw.xiu);setContentView(R.layout.activity_xiu);mBtnXiu = (ImageView) this.findViewById(R.id.btn_xiu);rlXiu = (RelativeLayout) this.findViewById(R.id.rl_xiu);mBtnXiu.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (!mp.isPlaying()) {mp.start();}waveAnim(XiuActivity.this, rlXiu);}});

以上是咻一咻效果的代码,

主要思路是

1 在父控件创建一个子View(波纹)

2  将新建的子View和“咻一咻按钮”居中

3 启动放大的动画顺带消失动画

4 最重要的一步,在动画结束时把新建的子View(波纹)移除 。

虽然很多人会想到是一个放大的动画来实现,但是在动画结束后移除子View可能没想到,如果没有移除子View点击1000次就会存在1000个子View并且不会被销毁导致内存不够用的情况,所以不得不说阿里对性能很有考虑

播放声音:在activity结束后也是要调用MediaPlayer 的 release方法来释放资源。

源代码:  https://github.com/smallnew/XiuXiu (感兴趣可以星下)

支付宝福卡破解——咻一咻的ui怎么实现相关推荐

  1. 支付宝福卡破解——居中的ViewPager

    支付宝福卡功能刚出来,我就对支付宝福卡的UI实现很感兴趣.第一是因为福卡的UI比较新颖而且不久前做的项目跟福卡UI有些类似,第二也是很想知道支付宝这样的大厂会不会更优雅地实现福卡的UI. 1.使用hi ...

  2. 2020年支付宝福卡获取攻略

    2020年支付宝福卡获取攻略 一共有:沾福气,富强福,敬业福,爱国福,和谐福,友善福. 方式: 1)AR扫码,容易收获"沾福气"和"和谐福",其他福卡也有机会获 ...

  3. 支付宝 福卡 出花花卡 敬业福 的 福图片

    又到了一年一度的支付宝扫福了 扫这张福可出沾福卡或者花花卡 亲测有效

  4. 集齐支付宝福卡秘籍来了!

    临近过年

  5. android 支付宝特别卡,2017支付宝取消万能卡了吗 顺手牵羊卡被取消了吗

    今天的最新话题支付宝本来在今天准备推出顺手牵羊卡的,但是现在决定取消了,因为做了一个调查,大部分人都不希望自己的卡被顺走,于是就取消了,到底是怎么回事呢,希望能帮到大家! 软件名称:支付宝 for a ...

  6. Flutter(十八)——支付宝咻一咻动画实践

    本文目录 咻一咻设计 代码实现咻一咻 三个动画的实现 构建圆 透明效果 咻一咻设计 对于支付宝咻一咻功能,是在2016年的时候上线到支付宝的,那个时候好像是专门为了集五福而设计的功能,现在肯定已经不在 ...

  7. 实现支付宝咻一咻的几种思路

    对于现在最火的无外乎集五福了,而五福除了加十个好友获得外,最直接的途径就是支付宝的咻一咻了.那么咻一咻具体有哪些实现方式呢?下面我们将一一介绍这几种思路的实现过程. 1.自定义View实现咻一咻 那么 ...

  8. 咻一咻 android代码,支付宝咻一咻怎么用 Android帮你实现咻一咻

    对于之前最火的无外乎集五福了,而五福除了加十个好友获得外,最直接的途径就是支付宝的咻一咻了.那么咻一咻具体有哪些实现方式呢?下面我们将一一介绍这几种思路的实现过程. 1.自定义View实现咻一咻 那么 ...

  9. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

最新文章

  1. 在leangoo里怎么设置看板周期,过滤看板数据?
  2. Node初学者入门,一本全面的NodeJS教程,微小的web框架,能实现文件上传功能以及数据解析功能...
  3. 可用和平精英画质助手iApp源码+全开源
  4. ruby+watir 安装
  5. todd li 保留_用Todd Motto对JavaScript进行解密
  6. Win10提示“为了对电脑进行保护,已经阻止此应用”怎么处理?
  7. C++ 0xc0000417 错误
  8. VC中调用cmd命令的四种方式
  9. matlab修改图像分辨率_matlab imresize 改变图像大小
  10. ensembl数据库BioMart使用,查找转录本ID在ensembl与refseq中的对应关系
  11. java 图形界面
  12. 4. ESP32S3 使用USB 加载SD_SDIO 当作 U盘使用
  13. 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?
  14. 幻读和不可重复读的区别
  15. 10月28日人工智能讲师叶梓为各工科院校老师进行了为期三天的人工智能培训
  16. 小程序源码:自适应来电模拟器-多玩法安装简单
  17. linux系统中drrwx-xr-x 用法详解
  18. 一个简单的在线答题程序
  19. 面试宝典笔记:卷积计算过程中的FLOPs
  20. ISO_IEC_7816-3

热门文章

  1. Zabbix怎么监控奇安信网神防火墙
  2. 2.5D的ACT类型游戏碰撞检测
  3. 计算机音乐我还是曾经那个少年,我还是曾经那个少年
  4. UE4/5 学习笔记*Note7:关于各种无缝动画的衔接问题_2022/8/14
  5. 项目实训2021.07.01
  6. 字符串编辑距离之JaroWinklerDistance
  7. 崭新朕亨公益公司 Kickstarter在创业公司中走出全新一条路
  8. 最全chromedriver options, selenium适用
  9. 羊皮卷的故事-第六章
  10. ACE: Ally Complementary Experts for Solving Long-Tailed Recognition in One-Shot(2022.5.27)