美文网首页码农进阶之旅程序员
解析:给我一个Path,还你一个动画

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

作者: 泅渡者 | 来源:发表于2017-01-02 00:39 被阅读81次

给我一个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由菜鸟到大神

相关文章

网友评论

    本文标题:解析:给我一个Path,还你一个动画

    本文链接:https://www.haomeiwen.com/subject/zqxwvttx.html