Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android特效專輯(十)——點擊水波紋效果實現,邏輯清晰實現簡單

Android特效專輯(十)——點擊水波紋效果實現,邏輯清晰實現簡單

編輯:關於Android編程

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

<code class=" hljs avrasm"><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">

</com.lgl.onclickruning.runing></relativelayout>
</code>

代碼其實很簡單,我們簡單的邏輯就可以實現了,但是別小看了這個思維,你可以用這個邏輯去實現更多有趣的特效,這裡就期待你的挖掘了,嘻嘻

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved