安卓自定义按压效果_Android实现自定义华丽的水波纹效果

先来看看效果

02aa7402b5ace3baa485647578154532.gif

实现效果

模拟水波纹的效果:点击屏幕就有圆环出现,半径从小到大,透明度从大到小(0为透明)

实现思路

1.自定义类继承View。

2.定义每个圆环的实体类 Wave,并初始化绘制圆环的画笔的数据。

3.重写onTouchEvent方法,down时,获得坐标点,做为圆环圆心。

4.发送handler信息,对数据进行修改,刷新页面。

5.重写onDraw方法,绘制一个圆环。

1. 自定义类继承View

新建WaterWaveView2类继承View

public class WaterWaveView2 extends View {

//存放圆环的集合

private ArrayList mList;

//界面刷新

private Handler mHandler = new Handler() {

@Override

public void handleMessage(Message msg) {

invalidate();//刷新界面,会执行onDraw方法

}

};

public WaterWaveView2(Context context) {

this(context, null);

}

public WaterWaveView2(Context context, AttributeSet attrs) {

super(context, attrs);

mList = new ArrayList();

}

2. 定义实体类 Wave

/**

* Created by HongJay on 2016/8/30.

* 把wave的数据封装成一个对象

*/

public class Wave {

public float x;//圆心x坐标

public float y;//圆心y坐标

public Paint paint; //画圆的画笔

public float width; //线条宽度

public int radius; //圆的半径

public int ranNum;//随机数

public int[] randomColor={Color.BLUE,Color.CYAN,

Color.GREEN,Color.MAGENTA,Color.RED,Color.YELLOW};

public Wave(float x, float y) {

this.x = x;

this.y = y;

initData();

}

/**

* 初始化数据,每次点击一次都要初始化一次

*/

private void initData() {

paint=new Paint();//因为点击一次需要画出不同的圆环

paint.setAntiAlias(true);//打开抗锯齿

ranNum=(int) (Math.random()*6);//[0,5]的随机数

paint.setColor(randomColor[ranNum]);//设置画笔的颜色

paint.setStyle(Paint.Style.STROKE);//描边

paint.setStrokeWidth(width);//设置描边宽度

paint.setAlpha(255);//透明度的设置(0-255),0为完全透明

radius=0;//初始化

width=0;

}

}

3. 重写onTouchEvent方法

获得圆心,并且删除集合中透明度为0的圆环,通知handler调用onDraw()方法

public boolean onTouchEvent(MotionEvent event) {

super.onTouchEvent(event);

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

float x = event.getX();

float y = event.getY();

deleteItem();

Wave wave = new Wave(x, y);

mList.add(wave);

//刷新界面

invalidate();

break;

case MotionEvent.ACTION_MOVE:

float x1 = event.getX();

float y1 = event.getY();

deleteItem();

Wave wave1 = new Wave(x1, y1);

mList.add(wave1);

invalidate();

break;

}

//处理事件

return true;

}

//删除透明度已经为0的圆环

private void deleteItem(){

for (int i = 0; i

if(mList.get(i).paint.getAlpha()==0){

mList.remove(i);

}

}

}

}

4. 重写onDraw()方法,循环绘制圆环

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

//避免程序一运行就进行绘制

if (mList.size() > 0) {

//对集合中的圆环对象循环绘制

for (Wave wave : mList) {

canvas.drawCircle(wave.x, wave.y, wave.radius, wave.paint);

wave.radius += 3;

//对画笔透明度进行操作

int alpha = wave.paint.getAlpha();

if (alpha < 80) {

alpha = 0;

} else {

alpha -= 3;

}

//设置画笔宽度和透明度

wave.paint.setStrokeWidth(wave.radius / 8);

wave.paint.setAlpha(alpha);

//延迟刷新界面

mHandler.sendEmptyMessageDelayed(1, 100);

}

}

}

总结

以上就是Android实现自定义水波纹效果的全部内容,怎么样?实现的效果不错吧,感兴趣的小伙伴们快快自己动手实践起来,希望这篇文章对大家的学习和工作能有所帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值