标签:
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