Android实现控件点击波纹扩散效果
来源:互联网 发布:linux cp命令 编辑:程序博客网 时间:2024/04/29 20:08
效果图
代码
public class MyButton extends android.support.v7.widget.AppCompatImageButton { private static final String TAG = "MyButton"; public static final int INVALIDATE_DURATION = 15;// 每次扩散半径 public static int DIFUSE_GAP = 10;// 系统判定为长按事件的时间 private int longPressTimeout; private Paint colofrPaint; //背景颜色 private Paint bgPaint;// 按下的时间 private long downTime = 0; private int eventX; private int eventY; private boolean isPushButton;// 当前半径 private int shaderRadio;// 最大半径 private int maxRadio; private int viewwidth; private int viewheight; public MyButton(Context context) { this(context,null); } public MyButton(Context context, AttributeSet attrs) { super(context, attrs); initPaint();// 系统判定长按的时间 longPressTimeout = ViewConfiguration.getLongPressTimeout();//500 Log.d(TAG, "MyButton: "+longPressTimeout); } public void initPaint(){ colofrPaint = new Paint(Paint.ANTI_ALIAS_FLAG); bgPaint = new Paint(Paint.ANTI_ALIAS_FLAG); colofrPaint.setColor(getResources().getColor(R.color.bottom_color)); bgPaint.setColor(getResources().getColor(R.color.reveal_color)); } @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: if(downTime==0) { downTime = SystemClock.elapsedRealtime(); } eventX = (int) event.getX(); eventY = (int) event.getY(); countMaxRatio(); isPushButton = true; Log.d(TAG, "onTouchEvent: "+maxRadio); postInvalidateDelayed(INVALIDATE_DURATION); break; case MotionEvent.ACTION_MOVE: break; case MotionEvent.ACTION_UP: //判断是否是长按 if (SystemClock.elapsedRealtime() - downTime < longPressTimeout) { DIFUSE_GAP = 30; postInvalidate(); } else { clearData(); } break; } return super.onTouchEvent(event); } @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); if(!isPushButton)return; //绘制按下后的背景 canvas.drawRect(0,0,viewwidth,viewheight,bgPaint); canvas.save(); //绘制扩散圆背景 canvas.clipRect(0,0,viewwidth,viewheight); Log.d(TAG, "dispatchDraw: "+shaderRadio); canvas.drawCircle(eventX,eventY,shaderRadio,colofrPaint); canvas.restore(); if(shaderRadio<maxRadio) { postInvalidateDelayed(INVALIDATE_DURATION,0,0,viewwidth,viewheight); shaderRadio += DIFUSE_GAP; } else{ clearData(); } } //计算最大半径 public void countMaxRatio(){ if (viewwidth>viewheight) { if(eventX<viewwidth/2){ maxRadio = viewwidth - eventX; } else{ maxRadio = eventX; } }else{ if (eventY < viewheight/2){ maxRadio = viewheight - eventY; }else{ maxRadio = viewheight/2+eventY; } } } public void clearData(){ downTime = 0; DIFUSE_GAP = 10; isPushButton = false; shaderRadio = 0; postInvalidate(); } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); viewwidth = w; viewheight = h; }}
2 0
- Android实现控件点击波纹扩散效果
- android 控件点击波纹效果
- 自定义Drawable 实现波纹扩散效果
- Android 设置主题实现点击波纹效果
- Android 设置主题实现点击波纹效果
- Android之实现点击波纹效果
- Android 设置主题实现点击波纹效果
- android点击波纹效果
- Android 去掉控件点击的瞬间的波纹效果
- android实现波纹效果
- 实现支付宝的咻一咻波纹扩散效果
- Android 点击水波纹扩散效果( Ripple Effect )
- Android L中水波纹点击效果的实现
- Android L中水波纹点击效果的实现
- Android L中水波纹点击效果的实现
- Android L中水波纹点击效果的实现
- Android L中水波纹点击效果的实现
- Android L中水波纹点击效果的实现
- Navicat11全系列激活(含注册机)
- kubernetes neutron网络架构方案实践
- 自定义弹框一(PopupWindow实现) 响应两种点击事件
- 二叉树的最大节点
- Android--百度地图报错:at com.baidu.location.LocationClient.onStart(Unknown Source)
- Android实现控件点击波纹扩散效果
- 关于Jquery WEUI Popup的笔记
- WARN com.mchange.v2.resourcepool.BasicResourcePool
- Laravel 创建可以传递参数 Console 服务
- mybatis配置文件常用语法mapper.xml
- 加速Android Studio编译
- Spring mvc详解
- EXt grid store删除record
- lintcode 翻转二叉树