博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高阶自定义View --- 粒子变幻、隧道散列、组合文字
阅读量:7059 次
发布时间:2019-06-28

本文共 2562 字,大约阅读时间需要 8 分钟。

目录

高阶自定义View --- 粒子变幻、隧道散列、组合文字

作者:林冠宏 / 指尖下的幽灵

掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8

博客:http://www.cnblogs.com/linguanh/

GitHub : https://github.com/af913337456/

联系方式 / Contact:913337456@qq.com


----- 效果视频 & 图片

----- 概述

----- 原理及其难点

----- 部分代码简述

----- 源码地址

效果视频 & 图片

第一个视频,无散列

d66426f11d92c5def18a4f2b4887aacf

第二个视频,具备散列

48f731a27909b3d2c7e788c82bb30282

2862ba5fd0bfbcd5a5ca1df48e5a6088

dbcc3a105b1b1cefed07ce038a0537b2


概述

跟随早前开源的 XView (https://github.com/af913337456/XView) 项目,本次在原基础上添加了 粒子变幻 自定义View。目前我在代码里面的设置它可以做到:

1,根据你输入文字,将被粒子组合而成。

2,粒子流具备多种属性,目前我拓展了缩放圆形与矩形墙壁碰撞,等等。
3,粒子每个互不影响,可以分批设置粒子特性,视频中就有 方形 和 圆形
4,所有的半径,坐标什么的参数都是可自定义的。
5,因为锚边是根据 bitmap 而来的,也就是说,你可以输入图片,然后由粒子组合
6,XView 项目早前已经开源了碰撞球,可以加入粒子相互碰撞

原理及其难点

1,根据 bitmap 找出文字或图像的边。这步骤要减少 o(n)

2,根据边路径,进行粒子填充

3,变幻算法,例如运动中的缩放

4,高效率的刷新,摒弃 View,采用 SurfaceView

部分代码简述

调用

// 粒子变幻particleView.setConfigAndRefreshView(    new ParticleView.Config()            .setCanvasWidth(                    // 设置画布宽度                    getWindowManager().getDefaultDisplay().getWidth()            )            .setCanvasHeight(800) // 设置画布高度            .setParticleRefreshTime(50) // 设置每帧刷新间隔            .set_x_Step(15) // 设置 x 轴每次取像素点的间隔            .set_y_Step(19) // 设置  轴每次取像素点的间隔            .setParticleCallBack(                new ParticleView.ParticleCallBack() {                    @Override                    public ParticleView.Particle setParticle(ParticleView.Particle p, int index, int x, int y) {                        p.setX(x); // 设置获取回来的 x 为该 粒子的x坐标                        p.setY(y); // 设置获取回来的 y 为该 粒子的y坐标                        p.setIsZoom(true);  // 设置当前颗粒子是否启动缩放                        p.setRadiusMax(12); // 设置当前颗粒子最大的缩放半径                        p.setRadius(12);    // 设置当前颗粒子默认的半径                        /** 下面的 %3 是我演示 分批次 显示不同效果而设置 **/                        if(index % 3==0){                            p.setRectParticle(true); // 这个粒子是 正方形 的                            p.setIsHash(  // 设置它是否是散列的,即是随机移动                                    true,                                    new Random().nextInt(30)-15, // x 速率                                    new Random().nextInt(30)-15  // y 速率                            );                        }                        return p; // 返回这个粒子                    }                    @Override                    public boolean drawText(Bitmap bg,Canvas c) {                        /** 这里就是我们要自定义显示任意文字的地方 */                        MainActivity.this.drawText(bg,c,s);                        return true; /** 告诉它不要使用默认的 txt */                    }                }            ));

源码地址

https://github.com/af913337456/XView

转载于:https://www.cnblogs.com/linguanh/p/7499708.html

你可能感兴趣的文章
GoldenGate 性能优化方法
查看>>
正则表达式和re模块
查看>>
[区块链]Merkle Tree
查看>>
Token 认证
查看>>
搜索服务solr 一二事(1) - solr-5.5 使用自带Jetty或者tomcat 搭建单机版搜索服务器...
查看>>
Html5新增加的属性
查看>>
php生成图片缩略图,支持png透明
查看>>
Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
查看>>
论一个蒟蒻的脑子里可以有多少坑(貌似咕了……目前更新保持在noip阶段)
查看>>
Python第三方库安装和卸载zz
查看>>
C++——虚函数表解析
查看>>
重磅!共享单车漏洞独家发布。
查看>>
html中特殊符号
查看>>
为什么 SharedPreferences 可以直接 调用,前面却没有对象
查看>>
php fsockopen 中多线程的解决办法
查看>>
yii框架后台过滤器的使用 安全防护
查看>>
[nginx]lua操作redis
查看>>
第四章 串和数组 (主要kmp算法)
查看>>
laravel 把对象换为数组以及 foreach循环遍历
查看>>
mongodb的docker化安装
查看>>