Android开发:文字描边

来源:互联网 发布:萨尔曼.可汗 知乎 编辑:程序博客网 时间:2024/05/18 12:03

[1].[代码] [Java]代码 跳至[1][2] [3]

?
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
package com.example.testproject;
 
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint.Style;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.TextView;
/*
 * StrokeTextView的目标是给文字描边
 * 实现方法是两个TextView叠加,只有描边的TextView为底,实体TextView叠加在上面
 * 看上去文字就有个不同颜色的边框了
 */
public class StrokeTextView extendsTextView {
 
    privateTextView borderText = null;///用于描边的TextView
 
    publicStrokeTextView(Context context) {
        super(context);
        borderText =new TextView(context);
        init();
    }
 
    publicStrokeTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        borderText =new TextView(context,attrs);
        init();
    }
 
    publicStrokeTextView(Context context, AttributeSet attrs,
            intdefStyle) {
        super(context, attrs, defStyle);
        borderText =new TextView(context,attrs,defStyle);
        init();
    }
 
    publicvoid init(){
        TextPaint tp1 = borderText.getPaint();
        tp1.setStrokeWidth(4);                                 //设置描边宽度
        tp1.setStyle(Style.STROKE);                            //对文字只描边
        borderText.setTextColor(getResources().getColor(R.color.border_text)); //设置描边颜色
        borderText.setGravity(getGravity());
    }
 
    @Override
    publicvoid setLayoutParams (ViewGroup.LayoutParams params){
        super.setLayoutParams(params);
        borderText.setLayoutParams(params);
    }
 
    @Override
    protectedvoid onMeasure(intwidthMeasureSpec, intheightMeasureSpec) {
        CharSequence tt = borderText.getText();
         
        //两个TextView上的文字必须一致
        if(tt==null || !tt.equals(this.getText())){
            borderText.setText(getText());
            this.postInvalidate();
        }
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        borderText.measure(widthMeasureSpec, heightMeasureSpec);
    }
 
    protectedvoid onLayout (booleanchanged, int left, int top, int right, intbottom){
        super.onLayout(changed, left, top, right, bottom);
        borderText.layout(left, top, right, bottom);
    }
 
    @Override
    protectedvoid onDraw(Canvas canvas) {
        borderText.draw(canvas);
        super.onDraw(canvas);
    }
 
}

[2].[代码] [XML]代码 跳至[1][2] [3]

?
1
2
3
4
<?xmlversion="1.0"encoding="utf-8"?>
<resources>
    <colorname="border_text">#ffffff</color>
</resources>

[3].[图片] miao_bian.png跳至 [1] [2] [3]

0 0
原创粉丝点击