高阶自定义View --- 粒子变幻、隧道散列、组合文字
高阶自定义View --- 粒子变幻、隧道散列、组合文字
作者:林冠宏 / 指尖下的幽灵
GitHub : https://github.com/af913337456/
联系方式 / Contact:913337456@qq.com
----- 效果视频 & 图片
----- 概述
----- 原理及其难点
----- 部分代码简述
----- 源码地址
效果视频 & 图片
第一个视频,无散列
第二个视频,具备散列
概述
跟随早前开源的 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
高阶自定义View --- 粒子变幻、隧道散列、组合文字的更多相关文章
- Android 初阶自定义 View 字符头像
自己很少做自定义 View ,只有最开始的时候跟着郭神写了一个小 Demo ,后来随着见识的越来越多,特别是在开源社区看到很多优秀的漂亮的控件,都是羡慕的要死,但是拉下来的代码还是看不明白,而且当时因 ...
- iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)
如果BarButtonItem是通过[[UIBarButtonItem alloc] initWithCustomView:(nonnull UIView *)]方法设置的.某些情况下需要修改BarB ...
- React 精要面试题讲解(五) 高阶组件真解
说明与目录 在学习本章内容之前,最好是具备react中'插槽(children)'及'组合与继承' 这两点的知识积累. 详情请参照React 精要面试题讲解(四) 组合与继承不得不说的秘密. 哦不好意 ...
- android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美女图片等源码
Android精选源码 一个爬取美女图片的app Android高仿抖音 android一个可以上拉下滑的Ui效果 android用shape方式实现样式源码 一款Android上的新浪微博第三方轻量 ...
- Android 自定义View合集
自定义控件学习 https://github.com/GcsSloop/AndroidNote/tree/master/CustomView 小良自定义控件合集 https://github.com/ ...
- Android零基础入门第24节:自定义View简单使用
原文:Android零基础入门第24节:自定义View简单使用 当我们开发中遇到Android原生的组件无法满足需求时,这时候就应该自定义View来满足这些特殊的组件需求. 一.概述 很多初入Andr ...
- MySQL 数据库SQL语句——高阶版本2
MySQL 数据库SQL语句--高阶版本2 实验准备 数据库表配置: mysql -uroot -p show databases; create database train_ticket; use ...
- 自定义view(一)
最近在学习自定义view 一遍看一别学顺便记录一下 1.View的测量-------->onMeasure() 首先,当我们要画一个图形的时候,必须知道三个数据:位置,长度,宽度 才能确定 ...
- Android之自定义View的实现
对于学习Android开发的小童鞋对于自定义View一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ...
随机推荐
- css 为元素选择器,css目标状态伪类,结构化选择器,多媒体选择器,清除表默认样式、属性选择器
伪元素选择器 :before 和 :after 添加的位置 :before --- 第一个子节点 :after --- 最后一个子节点 特点 1.默认是 inline 元素 2.必须包含 conten ...
- python3网络编程之socket
文章内容: socket介绍 socket参数介绍 流程描述 socket对象内建方法 基本socket实例 通过socket实现简单ssh并实现接收大数据 socket介绍 socket又称&quo ...
- Android保存图片到本地相册
好久没有写东西了.备份下知识吧.免得忘记了 . 首先贴一段代码 -- 这个是先生成一个本地的路径,将图片保存到这个文件中,然后扫描下sd卡.让系统相册重新加载下 .缺点就是只能保存到DCIM的文 件 ...
- kill 和killall----杀死进程
1.根据进程ip查看进程名 Liunx中 通过进程名查找进程PID可以通过 pidof [进程名] 来查找. 反过来 ,通过PID查找进程名则没有相关命令.但在linux根目录中,有一个/proc的 ...
- Unity NGUI Tween动画回调不执行问题
最近工作中遇到了一个问题 NGUI的Tween动画完成 回调函数 偶尔不执行 偶现Bug 今天我仔细看了下代码发现 TweenPosition tempTween = varTar.GetCompon ...
- 分享一款好用的PHP下ID混淆插件
前几天接到个任务,甲方先前自己找外包开发的一个产品购买小站不准备继续给外包维护了,转手抛给我们,顺便提了一堆修改意见. 其中一个意见是因为外包开发的订单网站直接用数据库自增的id作为订单号,导致订单号 ...
- curl笔记
-a/--append 上传文件时,附加到目标文件 -A/--user-agent 设置用户代理发送给服务器 -anyauth 可以使用"任何"身份验证方法 -b/--cookie ...
- HDU 5543 Pick The Sticks:01背包变种
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5543 题意: 给你N个金条和一张长度为L的桌子.每个金条长度为a[i],价值为w[i].金条只能在桌子 ...
- WebSphere服务器已启动但是初始化失败问题
--WebSphere服务器已启动但是初始化失败问题 -----------------------------------------------2014/03/06 经常有开发同事反映,环境用着用 ...
- 神器Vim之命令介绍
前天晚上看casa直播项目的组件化,不仅了解了如何快速对现有项目进行组件化,以及进一步不断迭代,实现完全组件化的过程:同时,也被casa的vim技能的熟练程度所震撼.早就听说,vim是unix系统上文 ...