解析:给我一个Path,还你一个动画

给我一个Path,还你一个动画:

最近看到一篇很有意思的文章,只要你能给我一个Path ,我就可以给你一个View。文章地址请移步:【Android】 给我一个Path,还你一个酷炫动画 - zxt0601的博客 - 博客频道 - CSDN.NET

但是当你看到文章后自己就会觉得有点蒙圈,有很多的疑问。

这个Path 怎么来的?


这些字母问路径是怎么获取的呢?

接下来请大家看下如此简单的代码:


没错在自定义View时加上这么一局便可完成这么一个酷炫的路径(未加动画)。

相信如果大家仔细看必然会发现以上的字母并不是原始的字母,它是由很多的直线组成的并不圆滑。

不和大家绕弯子,以下是见证奇迹的时刻:

public classStoreHousePath {

private static finalSparseArraysPointList;

static{

sPointList=newSparseArray();

float[][] LETTERS =new float[][]{

new float[]{

// A

24,0,1,22,

1,22,1,72,

24,0,47,22,

47,22,47,72,

1,48,47,48

},

new float[]{

// B

0,0,0,72,

0,0,37,0,

37,0,47,11,

47,11,47,26,

47,26,38,36,

38,36,0,36,

38,36,47,46,

47,46,47,61,

47,61,38,71,

37,72,0,72,

},

new float[]{

// C

47,0,0,0,

0,0,0,72,

0,72,47,72,

},

new float[]{

// D

0,0,0,72,

0,0,24,0,

24,0,47,22,

47,22,47,48,

47,48,23,72,

23,72,0,72,

},

new float[]{

// E

0,0,0,72,

0,0,47,0,

0,36,37,36,

0,72,47,72,

},

new float[]{

// F

0,0,0,72,

0,0,47,0,

0,36,37,36,

},

new float[]{

// G

47,23,47,0,

47,0,0,0,

0,0,0,72,

0,72,47,72,

47,72,47,48,

47,48,24,48,

},

new float[]{

// H

0,0,0,72,

0,36,47,36,

47,0,47,72,

},

new float[]{

// I

0,0,47,0,

24,0,24,72,

0,72,47,72,

},

new float[]{

// J

47,0,47,72,

47,72,24,72,

24,72,0,48,

},

new float[]{

// K

0,0,0,72,

47,0,3,33,

3,38,47,72,

},

new float[]{

// L

0,0,0,72,

0,72,47,72,

},

new float[]{

// M

0,0,0,72,

0,0,24,23,

24,23,47,0,

47,0,47,72,

},

new float[]{

// N

0,0,0,72,

0,0,47,72,

47,72,47,0,

},

new float[]{

// O

0,0,0,72,

0,72,47,72,

47,72,47,0,

47,0,0,0,

},

new float[]{

// P

0,0,0,72,

0,0,47,0,

47,0,47,36,

47,36,0,36,

},

new float[]{

// Q

0,0,0,72,

0,72,23,72,

23,72,47,48,

47,48,47,0,

47,0,0,0,

24,28,47,71,

},

new float[]{

// R

0,0,0,72,

0,0,47,0,

47,0,47,36,

47,36,0,36,

0,37,47,72,

},

new float[]{

// S

47,0,0,0,

0,0,0,36,

0,36,47,36,

47,36,47,72,

47,72,0,72,

},

new float[]{

// T

0,0,47,0,

24,0,24,72,

},

new float[]{

// U

0,0,0,72,

0,72,47,72,

47,72,47,0,

},

new float[]{

// V

0,0,24,72,

24,72,47,0,

},

new float[]{

// W

0,0,0,72,

0,72,24,49,

24,49,47,72,

47,72,47,0

},

new float[]{

// X

0,0,47,72,

47,0,0,72

},

new float[]{

// Y

0,0,24,23,

47,0,24,23,

24,23,24,72

},

new float[]{

// Z

0,0,47,0,

47,0,0,72,

0,72,47,72

},

};

final float[][] NUMBERS =new float[][]{

new float[]{

// 0

0,0,0,72,

0,72,47,72,

47,72,47,0,

47,0,0,0,

},

new float[]{

// 1

24,0,24,72,

},

new float[]{

// 2

0,0,47,0,

47,0,47,36,

47,36,0,36,

0,36,0,72,

0,72,47,72

},

new float[]{

// 3

0,0,47,0,

47,0,47,36,

47,36,0,36,

47,36,47,72,

47,72,0,72,

},

new float[]{

// 4

0,0,0,36,

0,36,47,36,

47,0,47,72,

},

new float[]{

// 5

0,0,0,36,

0,36,47,36,

47,36,47,72,

47,72,0,72,

0,0,47,0

},

new float[]{

// 6

0,0,0,72,

0,72,47,72,

47,72,47,36,

47,36,0,36

},

new float[]{

// 7

0,0,47,0,

47,0,47,72

},

new float[]{

// 8

0,0,0,72,

0,72,47,72,

47,72,47,0,

47,0,0,0,

0,36,47,36

},

new float[]{

// 9

47,0,0,0,

0,0,0,36,

0,36,47,36,

47,0,47,72,

}

};

// A - Z

for(inti =0;i < LETTERS.length;i++) {

sPointList.append(i +65,LETTERS[i]);

}

// a - z

for(inti =0;i < LETTERS.length;i++) {

sPointList.append(i +65+32,LETTERS[i]);

}

// 0 - 9

for(inti =0;i < NUMBERS.length;i++) {

sPointList.append(i +48,NUMBERS[i]);

}

// blank

addChar(' ', new float[]{});

// -

addChar('-', new float[]{

0,36,47,36

});

// .

addChar('.', new float[]{

24,60,24,72

});

}

public static voidaddChar(charc, float[] points) {

sPointList.append(c,points);

}

public staticArrayListgetPath(String str) {

returngetPath(str,1,14);

}

/**

*@paramstr

*@paramscale

*@paramgapBetweenLetter

*@returnArrayList of float[] {x1, y1, x2, y2}

*/

public staticArrayListgetPath(String str, floatscale, intgapBetweenLetter) {

ArrayList list =newArrayList();

floatoffsetForWidth =0;

for(inti =0;i < str.length();i++) {

intpos = str.charAt(i);

intkey =sPointList.indexOfKey(pos);

if(key == -1) {

continue;

}

float[] points =sPointList.get(pos);

intpointCount = points.length/4;

for(intj =0;j < pointCount;j++) {

float[] line =new float[4];

for(intk =0;k <4;k++) {

floatl = points[j *4+ k];

// x

if(k %2==0) {

line[k] = (l + offsetForWidth) * scale;

}

// y

else{

line[k] = l * scale;

}

}

list.add(line);

}

offsetForWidth +=57+ gapBetweenLetter;

}

returnlist;

}

}

其实最重要的时 实例化好的float[][] LETTERS,这个数组将我们的字母进行了点阵处理。

说白了汉字也是完全可以的,只不过汉字的点整就不止3*3 或者4*4 了(可以使用点阵生成器)。

以上原来就是令我深深折服的地方。

下面是GitDemo:GitHub - VampireCarrot/CustomView: 自定义View由菜鸟到大神

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 9,460评论 0 23
  • 睁开双眼 眸子里透出的永远是无法捉摸的讯息 走了好久都没有追上黑夜的影子 等待着黎明的曙光驱赶走黑色的梦魇 奈何桥...
    灰色朦胧阅读 184评论 0 0
  • 在Manncoffee 隔着一排座位的沙发上 坐着一个女孩 好像你 短的发 像你 白的面庞 像你 走过像轻盈的风 ...
    nxxs阅读 399评论 0 2
  • 我看着表上的时间 十二个钟头代表十二件该做的事 第一件事是找到笔墨 第二件事是准备信纸 第三件事要书写情书 第四件...
    墨名莫笑阅读 216评论 0 0