您的位置:首页 > 其它

自定义View

2016-07-14 08:03 295 查看
package com.rong.bean;

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

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.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class Circle extends View {

private List<Wave> list;
private int[] colors = new int[] { Color.BLUE, Color.RED, Color.YELLOW,
Color.GREEN, Color.LTGRAY, Color.DKGRAY };
// 控制是否继续动画
private boolean isRunning = false;
private Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
// 刷新数据
flushCircle();
// 刷新页面
invalidate();
if (isRunning) {
handler.sendEmptyMessageDelayed(1, 50);
}
break;

default:
break;
}

}

};

public Circle(Context context, AttributeSet attrs) {
super(context, attrs);
list = new ArrayList<Wave>();

}

/**
* 绘制
*/
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
for (int i = 0; i < list.size(); i++) {
Wave wave=list.get(i);
canvas.drawCircle(wave.cx, wave.cy, wave.r, wave.p);
}

}

/**
* 滑动监听
*/
@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);
break;

case MotionEvent.ACTION_DOWN:
int x1 = (int) event.getX();
int y1 = (int) event.getY();
setCircle(x1, y1);
break;

default:
break;
}

return true;

}

/**
* @author lcr 圆的封装
*/
class Wave {
// 圆心
int cx;
int cy;
// 画笔
Paint p;
// 半径
int r;
}

/**
* 更新圆的大小和透明度
*/
private void flushCircle() {
for (int i = 0; i < list.size(); i++) {
Wave wave = list.get(i);
// 获取画笔的透明度
int alpha = wave.p.getAlpha();
// 透明度越来越高
alpha = alpha - 5;
if (alpha < 5) {
alpha = 0;
list.remove(i);// 当完全透明时,移除该对象
}

// 设置透明度越来越高
wave.p.setAlpha(alpha);
// 扩大半径
wave.r += 3;

wave.p.setStrokeWidth(wave.r / 3);
//
if (list.size() == 0) {
isRunning = false;// 当集合为空时,停止运行
}
}
}

/**
* 设置圆
*
*/
private void setCircle(int x, int y) {
if (list.size() == 0) {
createAndAddCirlce(x, y);
isRunning = true;
handler.sendEmptyMessage(1);
} else {
createAndAddCirlce(x, y);
}
}

/**
* 创造圆并且封装
*/

private void createAndAddCirlce(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;
list.add(wave);// 封装进集合
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: