标签:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
|
package
com.phodev.andtools.widget;import
android.content.Context;import
android.graphics.Canvas;import
android.graphics.Paint;import
android.graphics.Paint.FontMetrics;import
android.graphics.Path;import
android.graphics.Region.Op;import
android.text.Layout;import
android.util.AttributeSet;import
android.widget.TextView;/** *
透明间距的TextView *
*
@author skg *
*/public
class
AlphaLineSpaceTextView extends
TextView { //
as thin as possible private
boolean
thinStyle = false; public
AlphaLineSpaceTextView(Context context, AttributeSet attrs, int
defStyle) { super(context,
attrs, defStyle); } public
AlphaLineSpaceTextView(Context context, AttributeSet attrs) { super(context,
attrs); } public
AlphaLineSpaceTextView(Context context) { super(context); } private
final
Path path = new
Path(); @Override public
void
draw(Canvas canvas) { Layout
layout = getLayout(); if
(layout == null)
{ super.draw(canvas); return; } Paint
paint = layout.getPaint(); float
spacingAdd = layout.getSpacingAdd(); if
(spacingAdd > 0
&& paint != null)
{ int
linesCount = getLineCount(); int
maxWith = getWidth(); int
saveCount = canvas.save(); FontMetrics
fm = paint.getFontMetrics(); int
descent = (int)
(fm.descent + 0.5f); int
topOffset; int
bottomOffset; path.reset(); if
(thinStyle) { //
clip first line top path.moveTo(0,
0); path.lineTo(maxWith,
0); path.lineTo(maxWith,
descent); path.lineTo(0,
descent); path.close(); try
{ canvas.clipPath(path,
Op.DIFFERENCE); }
catch
(Exception e) { } // topOffset
= -descent; bottomOffset
= 0; }
else
{ topOffset
= -descent - 2; bottomOffset
= 0; } //
clip every line bottom for
(int
i = 0;
i < linesCount; i++) { int
top = layout.getLineBaseline(i) - topOffset; int
bottom = layout.getLineBottom(i) - bottomOffset; /* *
Log.d("ttt", "---- baseline:" + layout.getLineBaseline(i) + *
" bottom:" + layout.getLineBottom(i) + "descent:" + descent); */ path.reset(); path.moveTo(0,
top); path.lineTo(maxWith,
top); path.lineTo(maxWith,
bottom); path.lineTo(0,
bottom); path.close(); try
{ canvas.clipPath(path,
Op.DIFFERENCE); }
catch
(Exception e) { } } // super.draw(canvas); canvas.restoreToCount(saveCount); return; } super.draw(canvas); }} |
标签:
原文地址:http://blog.csdn.net/u014311064/article/details/42644223