透明行间距的TextView
来源:互联网 发布:数据完整性 编辑:程序博客网 时间:2024/06/05 17:59
如果一个Textview需要bg,很见的那,如果告诉你行间距需要是透明的,估计就头大了,不过我头大过一次了,希望以后别人不再头大
里面用到了canvas的clip操作,但是硬件加速的时候却不支持这个操作,所以,最好禁止硬件加速,并添加try控制,如果exception了,只好反放弃这个效果,让super方法了继续绘制
里面用到了canvas的clip操作,但是硬件加速的时候却不支持这个操作,所以,最好禁止硬件加速,并添加try控制,如果exception了,只好反放弃这个效果,让super方法了继续绘制
标签: Android
[1].[文件] AlphaLineSpaceTextView.java ~ 2KB 下载(9) 跳至 [1]
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);
}
}
0 0
- 透明行间距的TextView
- TextView中多行字的行间距
- 设置TextView的行间距
- 设置textView的行间距
- 设置textView的行间距
- Android中设置TextView的行间距
- TextView中设置行间距的方法
- 【UI】TextView中多行字的行间距
- TextView中设置行间距的方法
- 修改Label或TextView的行间距
- 设置textview lable的行间距
- iOS设置textView的行间距
- textview 行间距对设计图的影响
- textview设置文本每行的行间距
- 一、设置textView的行间距
- TextView的换行与行间距
- TextView行间距设置
- TextView设置行间距
- LeetCode--Add Binary
- Android 编程下 Touch 事件的分发和消费机制
- 【日志日记】写博客
- Beetl通过JAVA接口获取JAVA中的变量
- java中volatile关键字的含义
- 透明行间距的TextView
- 必备的游戏开发资料
- Skyline 发布三维服务的流程总结
- 计算机底层知识拾遗(一)理解虚拟内存机制
- 关于函数strtok和strtok_r的使用要点和实现原理(一)
- 编程相关的计算机硬件
- <%@page contentType="text/html;charset=utf-8"%>和<meta http-equiv="Content-Type" content="text/html;>
- 年轻人能为这世界做什么
- Android上传文件与联系人的增删改查示例