支付宝福卡破解——咻一咻的ui怎么实现
来源:互联网 发布:网络模块怎么接线盒 编辑:程序博客网 时间:2024/04/30 08:36
通过春节的无节操营销,支付宝的咻一咻功能让许多人手酸过、心酸过(没能中敬业福),在吐槽之余好奇的程序员总会猜想这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; } @Override public void onAnimationStart(Animator animation) { } @Override public void onAnimationEnd(Animator animation) { if (mAniView != null && mViewGroup != null) { mViewGroup.post(new Runnable() { @Override public void run() { mViewGroup.removeView(mAniView); } }); } } @Override public void onAnimationCancel(Animator animation) { } @Override public 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() { @Override public 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 (感兴趣可以星下)
0 0
- 支付宝福卡破解——咻一咻的ui怎么实现
- 支付宝福卡破解——居中的ViewPager
- 支付宝福卡破解——飘雪效果
- 一个小公司怎么实现APP的UI自动化测试
- Android支付——改进的支付宝支付
- Android UI设计之<十四>自定义ViewGroup,实现绚丽的仿支付宝咻一咻雷达脉冲效果
- Android UI设计之<十四>自定义ViewGroup,实现绚丽的仿支付宝咻一咻雷达脉冲效果
- iOS分析UI利器—Reveal及简单破解方法
- WINCE应用的UI实现方案 —— 上篇:几种UI实现方案比较
- 支付宝天天红包怎么领取的
- Reveal 破解(分析iOS UI的利器)
- 关于支付宝支付界面的实现
- 转载快速实现支付宝的支付
- springboot--支付宝条码支付的实现
- iOS-支付宝支付的实现
- 暴力破解软件的破解选项怎么设置
- 怎么破解别人的手机密码?QQ1622863529
- [Android UI界面] 怎么实现腾讯微博的那种半透明效果
- Log4j扩展使用--自定义输出
- 假如我能使一颗心免于破碎
- 配置安装Scrapy
- 更改与显示文字标签
- 项目检出JRE问题(Unbound classpath container: 'JRE System Library [JavaSE-1.7]' in project 'idweb')
- 支付宝福卡破解——咻一咻的ui怎么实现
- ZSC 1115 Cantor表 (水题)
- 安卓第三天笔记--通知-进度条-时期
- UVA 1001(p379)----Say Cheese
- 对于灰度图像中同一个像素,MATLAB和Photoshop的灰度值不同
- leetcode-128-Longest Consecutive Sequence
- Docker:当今开发者的福音
- [读书笔记]虚拟内存
- Android工具类——LogUtils