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

android 控件点击波纹效果

2015-04-16 14:35 429 查看
package com.example.ecg_viewtest;

import java.util.LinkedList;
import java.util.List;

import android.R.integer;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.Button;

/**
* @author tanping
*
* @Description: TODO()
*
* @date 2015-4-16 上午9:19:40
*
*/
public class UIWaterButton extends Button implements OnTouchListener {

/**
* @param context
* @param attrs
*/
public UIWaterButton(Context context) {
super(context);
initView();
}

/**
*
*/
private void initView() {
setOnTouchListener(this);
}

/**
* @param context
* @param attrs
*/
public UIWaterButton(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}

public boolean pushPostion(PostionPoint pos) {

if (pos == null) {
throw new NullPointerException();
}

if (water == null) {
water = new LinkedList<UIWaterButton.PostionPoint>();
}

if (water.size() > 5) {
water.remove(0);
}

water.add(pos);
return true;

}

int maxLength = 5;
List<PostionPoint> water = new LinkedList<UIWaterButton.PostionPoint>();

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);

Paint paint = new Paint();
paint.setColor(Color.parseColor("#10000000"));

int maxr = getWidth() > getHeight() ? getWidth() : getHeight();

if (water == null) {
return;
}

for (int i = 0; i < water.size(); i++) {
PostionPoint point = water.get(i);
if (point.maxR == -1) { // 复杂的判断先不做了
point.maxR = maxr;
}
canvas.drawCircle(point.x, point.y, point.curR, paint);
point.curR += point.speed;

point.speed += 1;

if (point.curR > point.maxR) {
water.remove(point);
}
}

if (water.size() >= 0) {// 重画
invalidate();
}
}

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {

if (arg1.getAction() == MotionEvent.ACTION_DOWN) {
Log.d("tag", "action down");
PostionPoint point = new PostionPoint();
point.x = (int) arg1.getX();
point.y = (int) arg1.getY();

water.add(point);
invalidate();
}
if (arg1.getAction() == MotionEvent.ACTION_CANCEL
|| arg1.getAction() == MotionEvent.ACTION_UP
|| arg1.getAction() == MotionEvent.ACTION_OUTSIDE) {
water.clear();
invalidate();
}

return false;
}

static class PostionPoint {
int x, y;
int maxR = -1;// 最大半径
int curR = 2;// 当前的
int speed = 1;
}

}
</pre><pre name="code" class="html">实现的逻辑实际上就是在控件上从点击的位置开始画一个圆
</pre><pre name="code" class="html">


可加入QQ群397178710交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 波纹