您的位置:首页 > 移动开发 > Android开发

Android中自定义水波纹

2016-07-11 20:48 393 查看
package com.example.waterview;

import java.util.ArrayList;

import android.annotation.SuppressLint;
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.view.MotionEvent;
import android.view.View;

public class MyView extends View{
private int[] colors = new int[] { Color.BLUE, Color.RED, Color.YELLOW,
Color.GREEN, Color.BLACK, Color.DKGRAY };
// /控制是否继续执行动画
protected boolean isRunning = false;

/**
* 装圆的集合
*/
private ArrayList<Wave> wList;

public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
wList = new ArrayList<MyView.Wave>();
}

Handler handler = new Handler() {

public void handleMessage(android.os.Message msg) {

switch (msg.what) {
case 1:
System.out.println(wList.size() + "-----------");
// 刷新数据
flushData();
// 刷新页面
invalidate();

if (isRunning) {
handler.sendEmptyMessageDelayed(1, 50);

}

break;

default:
break;
}

};

};

@SuppressLint({ "ClickableViewAccessibility", "NewApi" })
@Override
public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
int x = (int) event.getX();
int y = (int) event.getY();
setCircle(x, y);
System.out.println(x + "====" + y);
break;
}

return true;
}

/**
* 更新圆的大小和透明度
*/
protected void flushData() {
for (int i = 0; i < wList.size(); i++) {

Wave wave = wList.get(i);
// 获得画笔透明度
int alpha = wave.p.getAlpha();

// 透明的越来越高
alpha = alpha - 5;
if (alpha < 5) {
alpha = 0;
wList.remove(i);
// isRunning=false;
}
// 设置的透明度越来越高
wave.p.setAlpha(alpha);
// 扩大半径
wave.r = wave.r + 3;

wave.p.setStrokeWidth(wave.r / 3);
}
if (wList.size() == 0) {
isRunning = false;
}
}

/**
* 设置圆
*
* @param x
* @param y
*/
private void setCircle(int x, int y) {

if (wList.size() == 0) {
createAndAddCircle(x, y);
isRunning = true;
handler.sendEmptyMessage(1);
} else {

createAndAddCircle(x, y);

}

}

@Override
protected void onDraw(Canvas canvas) {
for (int i = 0; i < wList.size(); i++) {
Wave wave = wList.get(i);
canvas.drawCircle(wave.cx, wave.cy, wave.r, wave.p);

}
}

/**
* 创造圆并且添加
*/
private void createAndAddCircle(int x, int y) {

Wave wave = new Wave();
wave.cx = x;
wave.cy = y;
Paint paint = new Paint();
paint.setStyle(Style.STROKE);
paint.setAntiAlias(true);
paint.setColor(colors[(int) (Math.random() * 6)]);
wave.p = paint;
wList.add(wave);

}

// 圆的封装类
private class Wave {
// 圆心
int cx;
int cy;

// 画笔
Paint p;
// 半径
int r;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 自定义View