一起Talk Android吧(第五百一十五回:绘制向外扩散的水波纹)
创始人
2024-05-28 21:55:46
0

文章目录

  • 整体思路
  • 实现方法
  • 示例代码

各位看官们大家好,上一回中咱们说的例子是"Java中的进制转换",这一回中咱们说的例子是"绘制向外扩散的水波纹"。闲话休提,言归正转, 让我们一起Talk Android吧!

整体思路

我们使用自定义View的思路来实现水波纹,先画一个圆环,然后通过动画不断地放大圆环进而形成向外扩散的效果,在放大圆环的同时让圆环逐渐变透明,形成波纹消失
的效果。两种动画效果叠加在一起就形成了扩散的水波纹效果。

实现方法

  1. 重写构造方法,在构造方法中初始化画笔相关参数;也可以把圆环的大小,半径,颜色做成自定义属性,通过属性来配置圆环的大小等信息;
  2. 重写测量方法,主要是计算圆环的长度和宽度,我们在这里就不不重写该方法了,大家可以参考自定义View中的模板代码;
  3. 重写绘制方法,在该方法中绘制一个圆环,绘制时计算圆环的位置(圆心),同时会使用圆环的半径和画笔;
  4. 创建一个动画集,其中包含大小缩放和透明度渐变两个子动画;缩放时只放大,渐变时从不透明渐渐变透明;
  5. 把自定义的波纹控件放到布局中,并且在给该控件绑定上一步中创建的动画集;

示例代码

介绍完实现方法,下面是示例代码,请大家参考:

public class WaveView extends View {private Paint mPaint;private int radius;private int circleWidth;private Context mContext;public WaveView(Context context) {super(context);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context);}public WaveView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {super(context, attrs, defStyleAttr, defStyleRes);init(context);}private void init(Context context) {mContext = context;mPaint = new Paint();mPaint.setColor(Color.BLUE);mPaint.setStyle(Paint.Style.STROKE);mPaint.setAntiAlias(true);circleWidth = 20;mPaint.setStrokeWidth(circleWidth);radius = 100;}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int x = getMeasuredWidth()/2;int y = getMeasuredHeight()/2;radius = getMeasuredWidth()/2-10;if(x<150){mPaint.setColor(Color.RED);}if(x>150 && x<250) {mPaint.setColor(Color.GREEN);}if(x>250 && x<350) {mPaint.setColor(Color.BLUE);}canvas.drawCircle(x, y, radius, mPaint);}public void startPlay() {Animation animation = AnimationUtils.loadAnimation(mContext, R.anim.wave_aimation);this.startAnimation(animation);}
}

上面的代码中的多个if判断条件是为了依据不同的宽度来设置不同的画笔颜色,这样可以画出不同颜色的圆环来。代码中使用的是视图动画集,下面是动画集中的代码:



把自定义的控件添加到布局中,然后在代码中获取布局中的控件,接着使用控件中的startPlay()方法就可以播放动画了,动画的效果就是向外扩散的水波纹。

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...