Android自定义view水波纹效果案例

简介: 想必做安卓的小伙伴都知道,在一个项目中或多或少的会使用到自定义view,因为原生框架始终满足不了UI-UE的需求,入不了他们的法眼。下面简单写一个自定义view。

想必做安卓的小伙伴都知道,在一个项目中或多或少的会使用到自定义view,因为原生框架始终满足不了UI-UE的需求,入不了他们的法眼。下面简单写一个自定义view。以水波纹效果为例


需求是写一个水波纹的效果,类似于pc上的点击效果。
需求分析:点击效果剖析:圆(实心、空心都可)+透明度越来越低+半径越来越大

理清需求以后就很好实现了,下面上代码:


/**
 * 半径越来越大--圆环锯齿等于半径的1/3----透明度越来越低
 * Created by Administrator on 2017/12/25.
 */
public class WaterView extends View{

    private Paint paint;
    private float x = 0;
    private float y = 0;
    private float radio=30;
    private float stroke=20;
    private int alpha=255;
    public WaterView(Context context) {
        super(context);
    }

    public WaterView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        initPaint();
    }

    private void initPaint(){
        paint = new Paint();
        paint.setAntiAlias(true);
        paint.setColor(Color.RED);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeWidth(radio/3);
        paint.setAlpha(alpha);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        if (x==0 && y==0){
            return;
        }
        canvas.drawCircle(x,y,radio,paint);//参数:坐标+半径
    }

    Handler handler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            initPaint();
            alpha=alpha-20;//透明度降低
            radio=radio+10;//半径增大
            if (alpha <= 20){
                alpha=0;
                paint.setAlpha(alpha);
            }else {
                sendEmptyMessageDelayed(0,40);
            }
            invalidate();//强制重绘
        }
    };

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                radio=30;
                stroke=20;
                alpha=255;
                x = event.getX();
                y = event.getY();
                //利用handler机制,设置画笔属性,在很短的时间内重新绘制,达到波纹效果
                handler.sendEmptyMessage(0);
                break;
        }
        return true;
    }
}

XML中直接引用即可

<com.example.administrator.mycustomview.MyView
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

水波纹持续放大

另外一些背景的点击效果也可以使用这种自定义,像cardview等一些做的比较好的控件都自带了点击的水波纹效果。代码逻辑很清晰。

源码地址,以modul导入即可

相关文章
|
22天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
51 1
|
3月前
|
监控 Android开发 C语言
深度解读Android崩溃日志案例分析2:tombstone日志
深度解读Android崩溃日志案例分析2:tombstone日志
84 0
|
3月前
|
Android开发 容器
Android UI设计: 什么是View和ViewGroup?
Android UI设计: 什么是View和ViewGroup?
36 0
|
1天前
|
移动开发 Java Unix
Android系统 自动加载自定义JAR文件
Android系统 自动加载自定义JAR文件
10 1
|
1天前
|
Shell Android开发 开发者
Android系统 自定义动态修改init.custom.rc
Android系统 自定义动态修改init.custom.rc
6 0
|
1天前
|
存储 安全 Android开发
Android系统 自定义系统和应用权限
Android系统 自定义系统和应用权限
5 0
|
26天前
|
Android开发
Android 开发 pickerview 自定义选择器
Android 开发 pickerview 自定义选择器
12 0
|
4月前
|
XML API Android开发
Android 自定义View 之 Dialog弹窗
Android 自定义View 之 Dialog弹窗
|
3天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
24 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
25天前
|
Java Android开发
Android 开发获取通知栏权限时会出现两个应用图标
Android 开发获取通知栏权限时会出现两个应用图标
12 0