Android实现水波纹外扩效果
微信曾经推出了一个查找附近好友的功能,大致功能是这样的:屏幕上有一个按钮,长按按钮的时候,会有一圈圈水波纹的动画向外扩散,松手后,动画结束。
现在简单来实现这样的一个动画功能:
思路: 主要用到了下面的蓝色的图片,定义三个ImageView,background都设置为蓝色的图片,然后定义一个包括缩放和透明度变化的动画集,然后每隔一段时间,让3个ImageView依次启动这个动画集,看起来就像蓝色的圆圈像水波纹向外扩散一样。
相关实现逻辑如下:
activity_main.xml
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent" >
- <ImageView
- android:id="@+id/wave1"
- android:layout_width="150dp"
- android:layout_height="150dp"
- android:layout_centerInParent="true"
- android:background="@drawable/wave"
- />
- <ImageView
- android:id="@+id/wave2"
- android:layout_width="150dp"
- android:layout_height="150dp"
- android:layout_centerInParent="true"
- android:background="@drawable/wave"/>
- <ImageView
- android:id="@+id/wave3"
- android:layout_width="150dp"
- android:layout_height="150dp"
- android:layout_centerInParent="true"
- android:background="@drawable/wave" />
- <ImageView
- android:id="@+id/normal"
- android:layout_width="166dp"
- android:layout_height="166dp"
- android:layout_centerInParent="true"
- android:background="@drawable/normal" />
- </RelativeLayout>
MainActivity.java
- package com.jackie.waveanimation;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.view.MotionEvent;
- import android.view.View;
- import android.view.animation.AlphaAnimation;
- import android.view.animation.AnimationSet;
- import android.view.animation.ScaleAnimation;
- import android.widget.ImageView;
- public class MainActivity extends Activity {
- private ImageView mNormal, mWave1, mWave2, mWave3;
- private AnimationSet mAnimationSet1, mAnimationSet2, mAnimationSet3;
- private static final int OFFSET = 600; //每个动画的播放时间间隔
- private static final int MSG_WAVE2_ANIMATION = 2;
- private static final int MSG_WAVE3_ANIMATION = 3;
- private Handler mHandler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- switch (msg.what) {
- case MSG_WAVE2_ANIMATION:
- mWave2.startAnimation(mAnimationSet2);
- break;
- case MSG_WAVE3_ANIMATION:
- mWave3.startAnimation(mAnimationSet3);
- break;
- }
- }
- };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mNormal = (ImageView) findViewById(R.id.normal);
- mWave1 = (ImageView) findViewById(R.id.wave1);
- mWave2 = (ImageView) findViewById(R.id.wave2);
- mWave3 = (ImageView) findViewById(R.id.wave3);
- mAnimationSet1 = initAnimationSet();
- mAnimationSet2 = initAnimationSet();
- mAnimationSet3 = initAnimationSet();
- mNormal.setOnTouchListener(new View.OnTouchListener() {
- @Override
- public boolean onTouch(View v, MotionEvent event) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_DOWN:
- showWaveAnimation();
- break;
- case MotionEvent.ACTION_UP:
- clearWaveAnimation();
- break;
- case MotionEvent.ACTION_CANCEL:
- clearWaveAnimation();
- }
- return true;
- }
- });
- }
- private AnimationSet initAnimationSet() {
- AnimationSet as = new AnimationSet(true);
- ScaleAnimation sa = new ScaleAnimation(1f, 2.3f, 1f, 2.3f,
- ScaleAnimation.RELATIVE_TO_SELF, 0.5f,
- ScaleAnimation.RELATIVE_TO_SELF, 0.5f);
- sa.setDuration(OFFSET * 3);
- sa.setRepeatCount(Animation.INFINITE);// 设置循环
- AlphaAnimation aa = new AlphaAnimation(1, 0.1f);
- aa.setDuration(OFFSET * 3);
- aa.setRepeatCount(Animation.INFINITE);//设置循环
- as.addAnimation(sa);
- as.addAnimation(aa);
- return as;
- }
- private void showWaveAnimation() {
- mWave1.startAnimation(mAnimationSet1);
- mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, OFFSET);
- mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, OFFSET * 2);
- }
- private void clearWaveAnimation() {
- mWave1.clearAnimation();
- mWave2.clearAnimation();
- mWave3.clearAnimation();
- }
- }
效果如下:
Android实现水波纹外扩效果相关推荐
- android动画水波纹外扩,Android实现水波纹外扩效果的实例代码
微信曾经推出了一个查找附近好友的功能,大致功能是这样的:屏幕上有一个按钮,长按按钮的时候,会有一圈圈水波纹的动画向外扩散,松手后,动画结束. 现在简单来实现这样的一个动画功能: 思路: 主要用到了下面 ...
- android 自定义水波纹点击效果Button
welcome 效果 ; 技术基础思路 自定义 Button 自定义 Drawable 项目源码 点击查看详情 自定义button 其实这只是一些说法 自定义button,我们只需要将子类继承 but ...
- android自定义控件几种,Android 自定义View一个控件搞定多种水波纹涟漪扩散效果 - CSDN博客...
效果图 实现思路 这个效果实现起来并不难,重要的是思路 此View满足了多种水波纹涟漪扩散效果,这要求它能满足很多的变化 根据上面的样式,可以看出此View需要满足以下变化 圆圈从中心可循环向外扩散 ...
- android水平波浪扩散动画,Android实现水波纹扩散效果
本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 ?澹∶挥型计??跃湍昧诵"泊?媪恕?/p> 先看一下如何使用这个View. andro ...
- Android自定义水波纹动画Layout
Android自定义水波纹动画Layout 源码是双11的时候就写好了,但是我觉得当天发不太好,所以推迟了几天,没想到过了双11女友就变成了前女友,桑心.唉不说了,来看看代码吧. 展示效果 Hi前辈 ...
- android曲线水波纹录音动画,Android-贝塞尔曲线实现水波纹动画
Android 系统api提供了quadTo和rQuadTo实现二阶贝塞尔曲线,三阶贝塞尔曲线在这不做阐述,只不过是两个控制点. 效果图 首先看张二阶贝赛尔的曲线 Path path = new Pa ...
- 震惊!原来Android OpenGL ES可以这样用,实现 (水波纹)涟漪效果超惊艳!
用几行代码实现惊艳的特效. 作者:字节流动 链接:https://juejin.im/post/5ed9c9445188254344768bd6 水波纹效果原理 最近一个做视频滤镜的朋友,让我给他做一 ...
- android自定义水波纹,Android自定义View——实现水波纹效果类似剩余流量球(示例代码)...
最近突然手痒就想搞个贝塞尔曲线做个水波纹效果玩玩,终于功夫不负有心人最后实现了想要的效果,一起来看下吧: 效果图镇楼 一:先一步一步来分解一下实现的过程 需要绘制一个正弦曲线(sin)或者余弦曲线(c ...
- Android 水波纹点击效果(Ripple Effect)
本文介绍的是Android5.0中其中一个炫酷的效果,点击水波纹扩散效果(Ripple Effect). 以下介绍的实现方式都是调用Android5.0的新API,并非自定义实现,所以只支持在Andr ...
最新文章
- 窗函数-减少傅里叶变换泄漏
- Git很简单--图解攻略
- java将属性练成字符串,Java中通过属性字符串名取属性内容
- 特斯拉Model S续航里程提高至409英里 刷新纪录
- 解码(一):AVCodecContext解码上下文初始化讲解
- flash player 10 音频新API使用:调节音高(pitch)
- VS2017更改设置目录一劳永逸的方法
- 小白学爬虫:Scrapy入门(四)
- Mapreduce概念及流程介绍
- H3C 帧中继地址映射
- 使用Junit对Android应用进行单元测试
- 基于SSM框架的学生学籍管理系统(源码及具体讲解)
- Nginx实现会话保持
- jedis 源码阅读二——jedisPool
- html5播放器的示例代码
- ARM系列之ARM 平台安全架构PSA和Trustzone区别 浅析
- LDCT图像重建论文——Eformer: Edge Enhancement based Transformer for Medical Image Denoising
- Android系统的JNI原理分析(二)- 数据类型转换和方法签名
- VC6.0打开崩溃,filetool解决办法[超详细]
- Linux Shell中单引号、双引号、反引号的解释