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 Material适配 为控件设置指定背景色和点击波纹效果
- android 5.0以上版本控件点击 水波纹效果
- Android Material适配 为控件设置指定背景色和点击波纹效果
- Android实现控件点击波纹扩散效果
- Android 去掉控件点击的瞬间的波纹效果
- Android之水波纹点击效果(RippleView)
- android不规则图形控件显示背景图片以及点击效果,多边形控件实例
- Android自己定义控件系列五:自己定义绚丽水波纹效果
- Android进阶之路 - 水波纹的点击效果
- Android 水波纹点击效果(Ripple Effect)
- Android之实现TextView控件圆角以及Button点击、焦点效果
- Android View 点击水波纹效果
- Android自定义控件:Android L控件点击水波纹的实现(源码 + Demo)
- Android特效专辑(十)——点击水波纹效果实现,逻辑清晰实现简单
- Android 点击水波纹扩散效果( Ripple Effect )
- android material design之点击波纹效果(ripple)
- Android 水波纹点击效果(Ripple Effect)
- Android实现点击Button产生水波纹效果
- Android源码解析--Material Design之水波纹点击效果RippleEffect使用
- 【Android UI】案例04配置控件点击效果(selector)