美文网首页
android按钮水波纹效果实现

android按钮水波纹效果实现

作者: 呼噜噜11 | 来源:发表于2017-02-25 11:11 被阅读0次

控件效果图

控件说明

默认水波纹正常波动,手机按下时波纹快速波动

实现思路

继承ImageView控件,ImageView背景图默认为蓝底货车文字图片,重写ImageView的onDraw函数,分为以下几个步骤开始画圈:

1.定义三个常量,一个是每次圆圈增大是半径增加的值widthInc,二是每次圆圈增大时透明度减少的值alphaDec,三是最近添加的圆圈透明度小于addOneCirleApha

,开始画第下一个圆圈

2.定义两个列表:1.alphaList 保存圆圈对应的透明度 2.startWidthList保存圆圈对应的半径

3.先画一个和蓝色圆圈背景半径同样大小的蓝色同心圆圈,把画笔设置成Paint.Style.STROKE,这样圆圈就是空心圆

4.画完之后再次调用ondraw时再画一个半径比上次同心圆大的圆圈,半径增加widthInc,透明度减少alphaDec

5.判断最近的一个圆圈的透明度是否小于addOneCirleApha,如果小于addOneCirleApha,开始绘制下一个圆圈

6.判断最外层的圆圈透明度是是否小于或等于零,如果满足条件,从startWidthList列表中删除这个圆圈

代码实现

for (int i = 0; i < alphaList.size(); i++) {

int alpha = Integer.parseInt(alphaList.get(i));

// 圆半径

int startWidth = Integer.parseInt(startWidthList.get(i));

paint.setAlpha(alpha);

canvas.drawCircle(getWidth() / 2, getHeight() / 2, startWidth,

paint);

if (isStarting && alpha > 0) {

int decAlpha = alpha - alphaDec;

if (decAlpha <= 0) {

decAlpha = 0;

}

alphaList.set(i, decAlpha + "");  // 画完圆圈后把透明度相应的减少alphaDec

startWidthList.set(i, (startWidth + widthInc) + "");

}

}

if (isStarting && Integer

.parseInt(alphaList.get(alphaList.size() - 1)) <= addOneCirleApha) {

alphaList.add(startalpha);      //当最新的一个圆圈透明度小于addOneCirleApha时,再增加一个圆圈

startWidthList.add(startWidht);

}

if (isStarting && Integer.valueOf(alphaList.get(0)) == 0) {

startWidthList.remove(0);  //当最早的一个圆圈的透明度等于0时,从列表中删除对应的源泉

alphaList.remove(0);

}

// 刷新界面

postInvalidateDelayed(postDelay); //控制圆圈的波纹波动速度,当postDelay数值越小时,波动越快,否则波动越慢,如果需要在手指按下时让波动速度加快,则减小postDelay的值

相关文章

    本文标题:android按钮水波纹效果实现

    本文链接:https://www.haomeiwen.com/subject/ayigwttx.html