医疗项目:电话问诊,需要为电话按钮添加波纹扩散效果

来源:互联网 发布:克里斯波什 编程 编辑:程序博客网 时间:2024/05/01 14:20

这里写图片描述

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>
0 0
原创粉丝点击