醫療項目:電話問診,需要爲電話按鈕添加波紋擴散效果

這裏寫圖片描述

package heshi.x_tools.activity;

import android.app.Activity;
import android.os.Bundle;

import heshi.x_tools.R;
import heshi.x_tools.widget.CustomWave;

public class WaveActivity extends Activity {

    private CustomWave cuswave;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_wave);
        cuswave=(CustomWave)findViewById(R.id.cuswave);
        cuswave.start();

    }

}
package heshi.x_tools.widget;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.View;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


/**
 * Created by chenxiangyu on 15/12/27.
 */
public class CustomWave extends View {
    private int width, height;
    private int centerX, centerY;

    private Paint paint;

    private int alpha = 255;
    private float radius = 0;

    private List<Wave> waves = Collections.synchronizedList(new ArrayList<Wave>());

    public CustomWave(Context context) {
        super(context);
    }

    public CustomWave(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public CustomWave(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    private Paint initPaint(int alpha) {
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.WHITE);
        paint.setAlpha(alpha);
        return paint;
    }


    private Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    changeCurrentWave();
                    invalidate();
                    handler.sendEmptyMessageDelayed(0, 50);
                    break;
                case 1:
                    Wave wave = new Wave();
                    wave.alpha = 255;
                    wave.paint = initPaint(wave.alpha);
                    waves.add(wave);
            }

        }
    };

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        width = 0;
        height = 0;
        //獲取width參數
        int specMode = MeasureSpec.getMode(widthMeasureSpec);
        //獲取height參數
        int specSize = MeasureSpec.getSize(widthMeasureSpec);
        switch (specMode) {
            case MeasureSpec.EXACTLY:
                width = getPaddingLeft() + getPaddingRight() + specSize;
                break;
            case MeasureSpec.AT_MOST:
                width = getPaddingLeft() + getPaddingRight();
                break;
            default:
                break;
        }
        specMode = MeasureSpec.getMode(heightMeasureSpec);
        specSize = MeasureSpec.getSize(heightMeasureSpec);
        switch (specMode) {
            case MeasureSpec.EXACTLY:
                height = getPaddingTop() + getPaddingBottom() + specSize;
                break;
            case View.MeasureSpec.AT_MOST://針對的是warp——content
                height = getPaddingTop() + getPaddingBottom();
                break;
            default:
                break;
        }

        centerX = width / 2;
        centerY = height / 2;
        setMeasuredDimension(width, height);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        for (Wave wave : waves) {
            canvas.drawCircle(centerX, centerY, wave.radius, wave.paint);
        }
    }

    private class Wave {
        //圓半徑
        float radius;
        //圓透明度
        int alpha;
        //畫圓的畫筆
        Paint paint;
    }

    private void changeCurrentWave() {
        for (Wave wave : waves) {
            if (wave.alpha <= 0) {
                wave.alpha = 255;
                wave.radius = 0;
                wave.paint = null;
            }
            wave.alpha -= 5;
            wave.radius += 5;
            wave.paint = initPaint(wave.alpha);
        }
    }

    public void start() {
        Wave wave = new Wave();
        wave.alpha = 255;
        wave.paint = initPaint(wave.alpha);
        waves.add(wave);
        handler.sendEmptyMessage(0);
        handler.sendEmptyMessageDelayed(1, 1000);
    }
}
<FrameLayout 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"
    android:background="@drawable/bg"
    tools:context="heshi.x_tools.activity.WaveActivity">

    <heshi.x_tools.widget.CustomWave
        android:id="@+id/cuswave"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:background="@drawable/circle_white" />

    <ImageView
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:background="@drawable/phone_red" />


</FrameLayout>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章