# Android特效專輯(十)——點擊水波紋效果實現,邏輯清晰實現簡單
> 這次做的東西呢,和上篇有點類似,就是用比較簡單的邏輯思路去實現一些比較好玩的特效,最近也是比較忙,所以博客更新的速度還得看時間去推演,但是也能保證一周三更的樣子,現在也還是以小功能,或者說是一些小入門級別的博客為主,我也不算是什么很厲害的人,很多細節的支持處理的仍然還是不到位,所以也是一直在彌補,話不多說,來看看今天的效果

> 實現起來很簡單吧,那我們就來看一下他是怎么實現的咯!
## OnclickRuning
~~~
package com.lgl.onclickruning;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
/**
* 點擊水波紋漣漪動畫效果
*
* @author LGL
*
*/
public class Runing extends View {
// 畫筆
private Paint mPaint;
// 內圓寬度
private int strokeWidth;
// 圓心x
private int cx;
// 圓心y
private int cy;
// 半徑
private int radius;
// Handler消息
private static final int FLUSH = 0;
public Runing(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
// 初始化畫筆
mPaint = new Paint();
// 抗鋸齒
mPaint.setAntiAlias(true);
// 設置顏色
mPaint.setColor(Color.BLUE);
// 設置空心
mPaint.setStyle(Style.STROKE);
// 設置內圓的寬度
mPaint.setStrokeWidth(strokeWidth);
// 設置透明度 0-255
mPaint.setAlpha(255);
// 初始值
strokeWidth = 0;
radius = 0;
}
/**
* 繪制
*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 繪制圓環
canvas.drawCircle(cx, cy, radius, mPaint);
}
/**
* 觸摸事件
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
// 判斷手勢按下和抬起
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
/**
* 按下去開始畫圓,也就是起漣漪,所以我們首先得獲取到按下的坐標,事實上,我們要做這樣操作的開發,都必須先提前拿到該有的坐標
*/
cx = (int) event.getX();
cy = (int) event.getY();
Log.i("坐標", "圓心x:" + cx + "圓心y:" + cy);
break;
}
// 初始化
init();
// 發送
handler.sendEmptyMessage(FLUSH);
return true;
}
/**
* 刷新狀態
*/
private void flush() {
// 半徑每次+10
radius += 10;
// 線條的寬度每次都是半徑的四分之一
strokeWidth = radius / 4;
// 重新設置給畫筆
mPaint.setStrokeWidth(strokeWidth);
// 顏色漸變,每次減少20的色值
int nextAlpha = mPaint.getAlpha() - 20;
// 避免等于負數
if (nextAlpha < 20) {
// 直接設置為透明
nextAlpha = 0;
}
// 繼續重新設置給畫筆
mPaint.setAlpha(nextAlpha);
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case FLUSH:
// 更改參數狀態
flush();
// 刷新 執行我們的繪制方法
invalidate();
// 繼續驗證透明度,只要不為0就一直發送,直到透明
if (mPaint.getAlpha() != 0) {
handler.sendEmptyMessageDelayed(FLUSH, 100);
}
break;
}
}
};
}
~~~
## layout_main.xml
~~~
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.lgl.onclickruning.Runing
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
~~~
> 代碼其實很簡單,我們簡單的邏輯就可以實現了,但是別小看了這個思維,你可以用這個邏輯去實現更多有趣的特效,這里就期待你的挖掘了,嘻嘻
## Demo下載地址:[http://download.csdn.net/detail/qq_26787115/9433534](http://download.csdn.net/detail/qq_26787115/9433534)
- 前言
- (一)——水波紋過渡特效(首頁)
- (二)——ViewPager渲染背景顏色漸變(引導頁)
- (三)——自定義不一樣的Toast
- (四)——APP主頁框架TabHost綁定ViewPager的替換者TabLayout
- (五)——自定義圓形頭像和仿MIUI卸載動畫—粒子爆炸
- (六)——仿QQ聊天撒花特效,無形裝逼,最為致命
- (七)——飛機升空特效,一鍵清理緩存,靈活運用動畫會有不一樣的感受
- (八)——實現心型起泡飛舞的特效,讓你的APP瞬間暖心
- (九)——仿微信雷達搜索好友特效,邏輯清晰實現簡單
- (十)——點擊水波紋效果實現,邏輯清晰實現簡單
- (十一)——仿水波紋流量球進度條控制器,實現高端大氣的主流特效
- (十二)——仿支付寶咻一咻功能實現波紋擴散特效,精細小巧的View