透明行间距的TextView

如果一个Textview需要bg,很见的那,如果告诉你行间距需要是透明的,估计就头大了,不过我头大过一次了,希望以后别人不再头大

里面用到了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);

    }

}

时间: 2024-10-09 22:05:45

透明行间距的TextView的相关文章

Android 自己定义TextView 实现文本间距

转载请标明出处: http://blog.csdn.net/u011974987/article/details/50845269: Android系统中TextView默认显示中文时会比較紧凑.不是非常美观.为了让每行保持一定的行间距,能够设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 可是有时候我们须要在TextView的文本之间有间距,两个字的话,我们能够在xml文件里.用敲空格的方式来实现.假设有非常多文本或者是一个

Android 自定义TextView 实现文本间距

Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 但是有时候我们需要在TextView的文本之间有间距,两个字的话,我们可以在xml文件中,用敲空格的方式来实现,如果有很多文本或者是一个变量的文本呢.我们还这样用敲空格的方式来实现吗?oh no~! 如何实现行间距和文本间距呢?(请往下看 ↓). 1.设置TextView的

iOS开发之UITextView,设置textView的行间距及placeholder

一.设置textView的行间距 1.如果只是静态显示textView的内容为设置的行间距,执行如下代码: //    textview 改变字体的行间距     NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];     paragraphStyle.lineSpacing = 10;// 字体的行间距          NSDictionary *attributes = @{  

Android给TextView和EditText等控件设置透明背景、圆角边框

第一种方法:在drawable文件夹下新建一个文件设置背景样式 代码: 在drawable文件夹下面新建textviewborder.xml <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#80858

Android如何设置TextView的行间距、行高。

     Android系统中TextView默认行间距比较窄,不美观.     我们可以设置每行的行间距,可以通过属性android:lineSpacingExtra或android:lineSpacingMultiplier来做. 在你要设置的TextView中加入如下代码: 1.android:lineSpacingExtra 设置行间距,如"8dp". 2.android:lineSpacingMultiplier 设置行间距的倍数,如"1.5″.       示例:

Android TextView 设置行间距的问题 (setLineSpacing ,lineSpacingExtra, lineSpacingMultiplier)

最近的项目中,需要用到自定义控件.有个组件要获取绘制文本的高度,翻开TextView 的源码,有个方法 getLineHeight() public int getLineHeight() { return FastMath.round(mTextPaint.getFontMetricsInt(null) * mSpacingMult + mSpacingAdd); } getLineHeight 的注释如下: /** * @return the height of one standard l

Android如何设置TextView的行间距、行高

原文来自:你我学习网: 链接地址:http://www.niwoxuexi.com/blog/android/article/222.html Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距, 可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 关于Android下TextView中文换行问题,可查看Android自定义view-文本自动换行. 1.android:lin

Android系统中设置TextView的行间距(非行高)

Android系统中TextView默认显示中文时会比较紧凑,不是很美观.为了让每行保持一定的行间距,可以设置属性android:lineSpacingExtra或android:lineSpacingMultiplier. 关于Android下TextView中文换行问题,可查看Android自定义view-文本自动换行. 1.android:lineSpacingExtra设置行间距,如”3dp”. 2.android:lineSpacingMultiplier设置行间距的倍数,如”1.2″

Android - TextView 设置行间距、行高

在你要设置的TextView中加入如下代码: 1.android:lineSpacingExtra 设置行间距,如”8dp”. 2.android:lineSpacingMultiplier 设置行间距的倍数,如”1.5″.