自定义水波扩散图片
来源:互联网 发布:淘宝规则扣分 编辑:程序博客网 时间:2024/04/28 14:59
公司产品需要一个按钮有一个水波纹扩散的效果,就简单的做了一个。先上图
然后就是源码了,代码很简单 我就不解释了,就是想留着做个纪念
package com.example.administrator.myapplication.view;import android.animation.ObjectAnimator;import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.os.Handler;import android.os.Message;import android.support.annotation.Nullable;import android.util.AttributeSet;import android.util.Log;import android.view.View;import android.widget.ImageView;import com.example.administrator.myapplication.R;/** * Created by Xuyan on 2017/6/13 0013. */public class MyImageView extends android.support.v7.widget.AppCompatImageView { /** * 画边框的画笔 */ private Paint paint; /** *边框的颜色 */ private int bordColor; /** * 边框总共的数量 * @param context */ private final static int Total = 3; /** * 是否要创建新的边框 * @param context */ private boolean isBord = true; /** * 边框半径 */ private float bordRadio = 0; private RectF rectF ; private int alpha=255; private int bordWith =10; public MyImageView(Context context) { super(context); } public MyImageView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray a =context.obtainStyledAttributes(attrs, R.styleable.MyImageView); bordColor = a.getColor(R.styleable.MyImageView_bordcolor, Color.parseColor("#ffffff")); a.recycle(); init(); } public void init(){ paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(bordWith); paint.setStyle(Paint.Style.STROKE); rectF = new RectF(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int with = setMeasure(widthMeasureSpec,100); int height = setMeasure(heightMeasureSpec,100); if (with!=height){ with=Math.max(with,height); height =with; } setMeasuredDimension(with,height); rectF.set(0,0,getMeasuredWidth(),getMeasuredWidth()); new Thread(runnable).start(); } public int setMeasure(int MeasureSpec,int defultsize){ int model = View.MeasureSpec.getMode(MeasureSpec); int size = View.MeasureSpec.getSize(MeasureSpec); int result; if (model==View.MeasureSpec.EXACTLY){ result = size; }else { if (model== View.MeasureSpec.AT_MOST){ result = Math.max(size,defultsize); }else { result = defultsize; } } return result; } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); for (int i=0;i<Total;i++){ canvas.drawCircle(getMeasuredHeight()/2,getMeasuredHeight()/2,bordRadio-i*100,paint); } } Handler hanl = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (msg.what==0){ paint.setAlpha(alpha); invalidate(); } } }; Runnable runnable = new Runnable() { @Override public void run() { while (true){ if (bordRadio>getMeasuredWidth()/2){ bordRadio = 0; bordWith =10; alpha=255; }else { bordRadio=bordRadio+2; alpha =(alpha-(int)(bordRadio/255))<0?0:(alpha-(int)(bordRadio/255)); bordWith +=10; } try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } hanl.sendEmptyMessage(0); } } }; /** * 设置圆环半径 */ public void setRadio(int bordRadio){ if (bordRadio>getMeasuredHeight()/2){ this.bordRadio = getMeasuredHeight()/2; }else { this.bordRadio = bordRadio; } } /** * 设置圆环初始的边框宽度 */ public void setBordWith(int bordWith){ if (bordWith>50||bordWith<0){ bordWith=10; }else { this.bordWith =bordWith; } }}
阅读全文
0 0
- 自定义水波扩散图片
- 自定义View之圆形水波扩散动效
- 单个水波纹扩散
- Android水波纹扩散效果
- Android 水波纹扩散效果
- android 圆圈水波扩散动画
- 编写shader模拟水波扩散效果
- 多个彩色水波纹扩散效果
- android 炫酷的水波扩散效果
- 以动画实现 水波纹扩散效果.
- 安卓水波纹扩散和水波进度Demo
- 图像处理之水波纹扩散效果(water ripple effect)
- Java Swing模拟水波纹扩散效果动画
- 仿Android5.0 水波扩散效果(Ripple)简单实现
- 模拟水波纹扩散时的最大半径计算问题
- 自定义控件水波纹
- 自定义水波纹View
- 自定义view水波纹
- 运行时异常与一般异常有何异同?
- python编码规范
- c中文件的读取操作
- 苹果的MDM简介
- SQL查询某一字段唯一值及其记录条数的语句
- 自定义水波扩散图片
- 无线传感器网络MAC层协议的研究现状
- 用代码初始化ViewController的View
- GridControl 行背景颜色设置
- linux之top 简探究
- C++ 不让计算机休眠
- 关于读不读博这件利益相关的事引发的人生感悟
- LeetCode-algorithms 399. Evaluate Division
- vue2.0,vue-router配置