高阶自定义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一定不会陌生,相信大家对它是又爱又恨,爱它可以跟随我们的心意设计出漂亮的效果:恨它想要完全流畅掌握,需要一定的功夫.对于初学者来说确实很不容易,网上 ...
随机推荐
- 项目中ApplicationContext
applicationContext说白了就是对beanFactory的扩展,也就是一个spring容器,而且applicationContext是单例的,项目中主要包含一个webApplicatio ...
- webpack模块解析
前面的话 在web存在多种支持JavaScript模块化的工具(如requirejs和r.js),这些工具各有优势和限制.webpack基于从这些系统获得的经验教训,并将模块的概念应用于项目中的任何文 ...
- mybatis深入理解之 # 与 $ 区别以及 sql 预编译
mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: select * from user where name = ...
- hdu--1077--Catching Fish
思路: 1.枚举两点确定圆心,大于2不用考虑 2.逐个判断判断距圆心的距离小于1.00001符合题意 这个题,主要在求圆心上废了不少功夫,但是仍存在问题 #include<iostrea ...
- C语言数组:C语言数组定义、二维数组、动态数组、字符串数组
1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...
- Java中StringBuffer类append方法的使用
public static void testAppend() { StringBuffer sb = new StringBuffer("This is a StringBuffer!&q ...
- JavaScript实现的--贪吃蛇
总的实现思路: 一.效果部分: 1.编写html代码,加上样式. 二.JavaScript部分: 1.利用dom方法创建一块草坪,即活动区域: 2.创建一条蛇,并设置其初始位置: ...
- chrome地址栏命令
Chrome作为一个前端开发的标准浏览器,用来体验和测试日新月异的新特性,自然是没话说. 有些新特性是需要特意开启设置的,有很多浏览器的内置功能也是要通过命令来开启或者使用的. Chrome 有很多的 ...
- Orleans稍微复杂的例子—互动
这是Orleans系列文章中的一篇.首篇文章在此 我费力费心的翻译过官方的教程,但是本人英语词汇量不高,可是架不住电子词典啊-只要肯花时间,我这些内容谁都可以做出来.所以这个事例告诉我们一个道理,那就 ...
- 曲线点抽稀算法-Python实现
何为抽稀 在处理矢量化数据时,记录中往往会有很多重复数据,对进一步数据处理带来诸多不便.多余的数据一方面浪费了较多的存储空间,另一方面造成所要表达的图形不光滑或不符合标准.因此要通过某种规则,在保证矢 ...