微信曾经推出了一个查找附近好友的功能,大致功能是这样的:屏幕上有一个按钮,长按按钮的时候,会有一圈圈水波纹的动画向外扩散,松手后,动画结束。
现在简单来实现这样的一个动画功能:
思路: 主要用到了下面的蓝色的图片,定义三个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实现水波纹扩散效果的实例代码。分享给大家供大家参考,具体如下: 项目地址下载 1.效果图: 2.使用方法: 在xml里使用RippleImageView自定义控件: 在Activity中的使用: 3.如何将自定义控件引入到项目:
本文向大家介绍Android实现水波纹扩散效果,包括了Android实现水波纹扩散效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 囧!没有图片所以就拿了小安代替了。 先看一下如何使用这个View。 是的,没有别的代码了,就这么简单 实现思路 自定义ViewGroup,创建一个用显示图片的view,在创建
本文向大家介绍Android实现水波纹效果,包括了Android实现水波纹效果的使用技巧和注意事项,需要的朋友参考一下 一、效果 点击开始: 点击停止: 二、在MainActivity中 三、在activity_main中 四、在WaveView中: 五、在CircleImageView中: 六、在attrs中 以上所述是小编给大家介绍的Android实现水波纹效果,希望对大家有所帮助,如
本文向大家介绍Android实现兼容的水波纹效果,包括了Android实现兼容的水波纹效果的使用技巧和注意事项,需要的朋友参考一下 先看看效果图 其实,要实现这一效果很简单,只要分drawable和drawablev21两个文件夹就好了。 普通情况下的selector: v21中的selector: 这里ripple中的color就是按下的水波纹颜色,在里面加入一个item,这个item就会变成背
本文向大家介绍Android实现水波纹特效,包括了Android实现水波纹特效的使用技巧和注意事项,需要的朋友参考一下 最近需要做个类似于水波纹动画的效果,思考了一下不需要UI切个动态图,Android原生的技术利用动画或者自定义控件都可以实现,下面上个图类似于这样的效果 下面请看第一种动画实现,这种方式较为简单些,就是利用3个ImageView不断地做缩放和渐变的动画。 布局文件定义一下 接下来
本文向大家介绍Android自定义View实现水波纹效果,包括了Android自定义View实现水波纹效果的使用技巧和注意事项,需要的朋友参考一下 介绍:水波纹散开效果的控件在 App 里面还是比较常见的,例如 网易云音乐歌曲识别,附近搜索场景。 看下实现的效果: 实现思路: 先将最大圆半径与最小圆半径间距分成几等份,从内到外,Paint 透明度依次递减,绘制出同心圆,然后不断的改变这些同心圆的半