本文讲述了Android实现水波纹扩散效果的实例代码。分享给大家供大家参考,具体如下:
项目地址下载
1.效果图:
2.使用方法:
在xml里使用RippleImageView自定义控件:
xmlns:app="http://schemas.android.com/apk/res-auto" <com.army.rippleimage.RippleImageView android:id="@+id/rippleImageView" android:layout_width="match_parent" android:layout_height="180dp" android:background="#37B158" app:show_spacing_time="800"//动画播放间隔时间 app:imageViewWidth="35dp"//图片的大小 app:imageViewHeigth="35dp" android:layout_centerHorizontal="true"> </com.army.rippleimage.RippleImageView>
在Activity中的使用:
rippleImageView=(RippleImageView)findViewById(R.id.rippleImageView); //开始动画 rippleImageView.startWaveAnimation(); //停止动画 rippleImageView.stopWaveAnimation();
3.如何将自定义控件引入到项目:
拷贝自定义控件RippleImageView
/** * Description : * Author : liujun * Email : liujin2son@163.com */ public class RippleImageView extends RelativeLayout { private static final int SHOW_SPACING_TIME=700; private static final int MSG_WAVE2_ANIMATION = 1; private static final int MSG_WAVE3_ANIMATION = 2; private static final int IMAMGEVIEW_SIZE = 80; /**三张波纹图片*/ private static final int SIZE =3 ; /**动画默认循环播放时间*/ private int show_spacing_time=SHOW_SPACING_TIME; /**初始化动画集*/ private AnimationSet [] mAnimationSet=new AnimationSet[SIZE]; /**水波纹图片*/ private ImageView [] imgs=new ImageView[SIZE]; /**背景图片*/ private ImageView img_bg; /**水波纹和背景图片的大小*/ private float imageViewWidth=IMAMGEVIEW_SIZE; private float imageViewHeigth=IMAMGEVIEW_SIZE; private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_WAVE2_ANIMATION: imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE2_ANIMATION]); break; case MSG_WAVE3_ANIMATION: imgs[MSG_WAVE2_ANIMATION].startAnimation(mAnimationSet[MSG_WAVE3_ANIMATION]); break; } } }; public RippleImageView(Context context) { super(context); initView(context); } public RippleImageView(Context context, AttributeSet attrs) { super(context, attrs); getAttributeSet(context,attrs); initView(context); } /** * 获取xml属性 * @param context * @param attrs */ private void getAttributeSet(Context context, AttributeSet attrs) { TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.custume_ripple_imageview); show_spacing_time = typedArray.getInt(R.styleable.custume_ripple_imageview_show_spacing_time, SHOW_SPACING_TIME); imageViewWidth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewWidth, IMAMGEVIEW_SIZE); imageViewHeigth = typedArray.getDimension(R.styleable.custume_ripple_imageview_imageViewHeigth, IMAMGEVIEW_SIZE); Log.d("TAG","show_spacing_time="+show_spacing_time+"mm imageViewWidth="+imageViewWidth+"px imageViewHeigth="+imageViewHeigth+"px"); typedArray.recycle(); } private void initView(Context context) { setLayout(context); for (int i = 0; i <imgs.length ; i++) { mAnimationSet[i]=initAnimationSet(); } } /** * 开始动态布局 */ private void setLayout(Context context) { LayoutParams params=new LayoutParams(dip2px(context,imageViewWidth),dip2px(context,imageViewHeigth)); //添加一个规则 params.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE); /**添加水波纹图片*/ for (int i = 0; i <SIZE ; i++) { imgs[i] = new ImageView(context); imgs[i].setImageResource(R.mipmap.point_empty); addView(imgs[i],params); } LayoutParams params_bg=new LayoutParams(dip2px(context,imageViewWidth)+10,dip2px(context,imageViewHeigth)+10); //添加一个规则 params_bg.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE); /**添加背景图片*/ img_bg=new ImageView(context); img_bg.setImageResource(R.mipmap.point_org); addView(img_bg,params_bg); } /** * 初始化动画集 * @return */ private AnimationSet initAnimationSet() { AnimationSet as = new AnimationSet(true); //缩放度:变大两倍 ScaleAnimation sa = new ScaleAnimation(1f, 2f, 1f, 2f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f, ScaleAnimation.RELATIVE_TO_SELF, 0.5f); sa.setDuration(show_spacing_time * 3); sa.setRepeatCount(Animation.INFINITE);// 设置循环 //透明度 AlphaAnimation aa = new AlphaAnimation(1, 0.1f); aa.setDuration(show_spacing_time * 3); aa.setRepeatCount(Animation.INFINITE);//设置循环 as.addAnimation(sa); as.addAnimation(aa); return as; } private static int dip2px(Context context, float dipValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dipValue * scale + 0.5f); } //============================对外暴露的public方法========================================= /** * 开始水波纹动画 */ public void startWaveAnimation() { imgs[0].startAnimation(mAnimationSet[0]); mHandler.sendEmptyMessageDelayed(MSG_WAVE2_ANIMATION, show_spacing_time); mHandler.sendEmptyMessageDelayed(MSG_WAVE3_ANIMATION, show_spacing_time * 2); } /** * 停止水波纹动画 */ public void stopWaveAnimation() { for (int i = 0; i <imgs.length ; i++) { imgs[i].clearAnimation(); } } /**获取播放的速度*/ public int getShow_spacing_time() { return show_spacing_time; } /**设计播放的速度,默认是800毫秒*/ public void setShow_spacing_time(int show_spacing_time) { this.show_spacing_time = show_spacing_time; } }
拷贝自定义属性到arrts下
<declare-styleable name="custume_ripple_imageview"> <attr name="show_spacing_time" format="integer"></attr> <attr name="imageViewWidth" format="dimension"></attr> <attr name="imageViewHeigth" format="dimension"></attr> </declare-styleable>
拷贝默认图片
本文向大家介绍Android实现水波纹扩散效果,包括了Android实现水波纹扩散效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android实现水波纹扩散效果的具体代码,供大家参考,具体内容如下 先上图 囧!没有图片所以就拿了小安代替了。 先看一下如何使用这个View。 是的,没有别的代码了,就这么简单 实现思路 自定义ViewGroup,创建一个用显示图片的view,在创建
本文向大家介绍Android实现水波纹外扩效果的实例代码,包括了Android实现水波纹外扩效果的实例代码的使用技巧和注意事项,需要的朋友参考一下 微信曾经推出了一个查找附近好友的功能,大致功能是这样的:屏幕上有一个按钮,长按按钮的时候,会有一圈圈水波纹的动画向外扩散,松手后,动画结束。 现在简单来实现这样的一个动画功能: 思路: 主要用到了下面的蓝色的图片,定义三个ImageView,backg
本文向大家介绍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 透明度依次递减,绘制出同心圆,然后不断的改变这些同心圆的半