自定义view点击水波纹效果_自定义view 点击效果_黄大包的博客-程序员秘密

技术标签: view  android  水波纹  自定义  安卓自定义控件  点击  

代码:

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

/**
 * Created by hwk on 2020/5/18.
 */
public class MyView extends View {
    private Paint paintPoint;//圆心
    private Paint paintWave;//波浪
    private float x, y;//画圆中心点坐标
    private int radiusPoint;//圆心直径
    private int radiusWave;//波浪直径

    private int alphaWave;//波浪透明度常量

    public MyView(Context context) {
        super(context);
        initPaint();
    }

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    private void initPaint() {
        paintPoint = new Paint();
        paintPoint.setStyle(Paint.Style.FILL);
        paintPoint.setColor(Color.parseColor("#FF0000"));
        paintPoint.setAntiAlias(true);
        paintPoint.setStrokeWidth(radiusPoint / 2);

        paintWave = new Paint();
        paintWave.setStyle(Paint.Style.FILL);
        paintWave.setColor(Color.parseColor("#BBCFFC"));
        paintWave.setAntiAlias(true);
        paintWave.setStrokeWidth(radiusWave / 2);
        paintWave.setAlpha(alphaWave);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                radiusPoint = 30;
                radiusWave = 30;
                alphaWave = 255;
                //获取点击的坐标位置
                x = event.getX();
                y = event.getY();
                flushPaint();
                break;
        }
        return super.onTouchEvent(event);
    }

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            flushPaint();
        }
    };

    private void flushPaint() {
        radiusPoint = radiusPoint - 2;
        radiusWave = radiusWave + 3;
        alphaWave = alphaWave - 20;
        if (alphaWave <= 25) {
            alphaWave = 0;
            radiusPoint = 30;
            paintWave.setStrokeWidth(radiusWave / 2);
            paintWave.setAlpha(alphaWave);
            paintPoint.setStrokeWidth(radiusPoint / 2);
            paintPoint.setAlpha(0);

            invalidate();
        } else {
            paintWave.setStrokeWidth(radiusWave / 2);
            paintWave.setAlpha(alphaWave);
            paintPoint.setStrokeWidth(radiusPoint / 2);
            paintPoint.setAlpha(255);

            invalidate();
            handler.sendEmptyMessageDelayed(0, 35);
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawCircle(x, y, radiusWave, paintWave);
        canvas.drawCircle(x, y, radiusPoint, paintPoint);
    }
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/huangwenkui1990/article/details/106194726

智能推荐

OpenCASCADE:形状愈合之概述_给我打包一份三十块钱的外卖的博客-程序员秘密

OpenCASCADE:形状愈合之概述介绍使用示例缺少接缝边缘的面线方向错误自相交线缺乏优势工具包结构查询状态介绍本手册解释了如何使用形状修复。它提供了有关其操作的基本文档。在外形修复工具包提供了一套工具来对开放CASCADE技术(的几何和拓扑工作OCCT)的形状。形状修复调整形状,使它们尽可能适合 Open CASCADE 技术使用。使用示例以下是一些典型问题的示例,并附有形状修复如何处理这些问题的插图:缺少接缝边缘的面问题:周期性表面上的面受到绕表面完整行程的电线的限制。这些线在 3d 中

PPSIG:AGCN-2S 动作识别_agcn代码_AI Studio的博客-程序员秘密

数据集为fsd-10花样滑冰,项目为ACGN-2S动作识别,可直接运行,acc为0.57

利用geoserver将jpg格式的图片发布成wms服务_geoserver发布jpg_四域公子的博客-程序员秘密

1、为什么会有这个需求呢?(1)因为有个项目想要在地图叠加2.5D厂区平面图,所以就选择了geoserver来发布服务;2、实现中需要解决的问题:2.1 一张jpg图片如何用geoserver来发布服务呢?(1)首先发布服务的数据源应该至少包括两种数据源:矢量数据源和栅格数据源。那么JPG格式图片,能不能向这两种数据源靠近呢?(2)经过查询资料,利用arcgis软件可以将JPG格式的图片...

QLineEdit的应用技术整理_iteye_7514的博客-程序员秘密

控制QLineEdit的输入范围1.使用正则表达式检验QLineEdit的输入范围(代码如下):#include &amp;lt;qvalidator.h&amp;gt;#include &amp;lt;qlineedit.h&amp;gt;QLineEdit *lineEdit = new QLineEdit(this);QRegExp regExp(&quot;[A-Za-z][1-9][0-9]{0...

《大道至简》第一章java伪代码分析_weixin_30505043的博客-程序员秘密

import java.大道至简第一章.*;package 编程的精义;public class 编程的精义{public static void 愚公(){System.out.println("愚公移山");--山;}public static void 子(){System.out.println("子移山");--山;}public static void 孙(){System.out.p...

java--Spring之AOP面向切片和Spring的简单用法_masterShaw的博客-程序员秘密

需要些xml文件的。参考路径:http://blog.csdn.net/lmdcszh/article/details/13774947

随便推点

学习【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台笔记(2.10-2.12)_委鬼傳语的博客-程序员秘密

【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台本项目是 学习Bilibili 全栈之巅 视频教程相关源码和体会https://gitee.com/blaunicorn/node-vue-wangzherongyao持续更新中…2.10 英雄管理,比较复杂的英雄编辑页面2.10.1 admin端Main.vue中创建英雄列表组(admin\src\views\Main.vue) &lt;el-menu-item-group&gt;

tensorflow冻结模型为pb文件的各种方法_tensorflow 冻结模型_nkxiaolei的博客-程序员秘密

笔者最近因为工作需要将TensorFlow训练模型迁移到晟腾芯片平台上离线推理,所以需要将ckpt或者h5模型冻结成pb,再利用ATC模型转换工具将pb转为离线模型om文件,期间遇到一些问题和坑,总结一下,供大家参考。1.Tensorflow1.x训练好的模型Ckpt文件:DB_resnet_v1_50_adam_model.ckpt-16801.indexDB_resnet_v1_50_adam_model.ckpt-16801.data-00000-of-00001DB_resnet_v1_5

【ogg研究】数据泵分片导入方式分析三次实验比较(飞入、飞行模式、大表的界定)_ogg 分片_回到未来望过去的博客-程序员秘密

之前使用rowid分片同步一个200G的表,天哪不提时间用了几天,使用oracle,当你感觉不靠谱的时候估计是真不靠谱。本文从表的索引字段着手。本文前提是生产库根本放不下你expdp的dmp文件,否则谁还会用着慢如蜗牛的分片方式,实在是被逼无奈,一个市局才那么大点生产的环境,不解,不过这也是asm害的,集成工程师都会觉得本机不需要那么大的空间,足够归档转存就够了说这么多就是为了向描述这...

使用IDEA运行时出现HTTP status 500-Internal Server Error 的错误_qq_21135187的博客-程序员秘密

使用IDEA运行时出现HTTP status 500-Internal Server Error 的错误Type Exception ReportDescription The server encountered an unexpected condition that prevented it from fulfilling the request.Exceptionjava.lang...

PO模型(设计模式)_po模型设计思想_摘下眼镜就是瞎子的博客-程序员秘密

文章目录什么是PO模型PO优点:PO的核心实例什么是PO模型PO模型全称:Page Object(思想与面向对象的特征相同),也叫PO设计模式。他的出现主要是为了解决自动化测试中代码量增加而难以维护。PO的优点:代码复用,可读性强,可维护性强个人理解:就是将重复的代码封装,复用。还有就是,如果应用后期修改UI界面学要重新定位元素,会非常的方便(例:那web端自动化selenium来说,重复性操作有,八大定位元素,点击,获取新的句柄,多表单等,可以将这些webdriver的操作封装到一个类中,需要

推荐文章

热门文章

相关标签