控件效果圖
控件說明
默認水波紋正常波動呢撞,手機按下時波紋快速波動
實現(xiàn)思路
繼承ImageView控件,ImageView背景圖默認為藍底貨車文字圖片诚啃,重寫ImageView的onDraw函數(shù),分為以下幾個步驟開始畫圈:
1.定義三個常量,一個是每次圓圈增大是半徑增加的值widthInc屋摔,二是每次圓圈增大時透明度減少的值alphaDec,三是最近添加的圓圈透明度小于addOneCirleApha
替梨,開始畫第下一個圓圈
2.定義兩個列表:1.alphaList 保存圓圈對應(yīng)的透明度 2.startWidthList保存圓圈對應(yīng)的半徑
3.先畫一個和藍色圓圈背景半徑同樣大小的藍色同心圓圈钓试,把畫筆設(shè)置成Paint.Style.STROKE,這樣圓圈就是空心圓
4.畫完之后再次調(diào)用ondraw時再畫一個半徑比上次同心圓大的圓圈副瀑,半徑增加widthInc弓熏,透明度減少alphaDec
5.判斷最近的一個圓圈的透明度是否小于addOneCirleApha,如果小于addOneCirleApha糠睡,開始繪制下一個圓圈
6.判斷最外層的圓圈透明度是是否小于或等于零挽鞠,如果滿足條件,從startWidthList列表中刪除這個圓圈
代碼實現(xiàn)
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 + "");? // 畫完圓圈后把透明度相應(yīng)的減少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時信认,從列表中刪除對應(yīng)的源泉
alphaList.remove(0);
}
// 刷新界面
postInvalidateDelayed(postDelay); //控制圓圈的波紋波動速度,當postDelay數(shù)值越小時均抽,波動越快嫁赏,否則波動越慢,如果需要在手指按下時讓波動速度加快油挥,則減小postDelay的值