Android开发:文字描边

[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 extends TextView {
 
     private TextView borderText = null ; ///用于描边的TextView
 
     public StrokeTextView(Context context) {
         super (context);
         borderText = new TextView(context);
         init();
     }
 
     public StrokeTextView(Context context, AttributeSet attrs) {
         super (context, attrs);
         borderText = new TextView(context,attrs);
         init();
     }
 
     public StrokeTextView(Context context, AttributeSet attrs,
             int defStyle) {
         super (context, attrs, defStyle);
         borderText = new TextView(context,attrs,defStyle);
         init();
     }
 
     public void init(){
         TextPaint tp1 = borderText.getPaint();
         tp1.setStrokeWidth( 4 );                                  //设置描边宽度
         tp1.setStyle(Style.STROKE);                             //对文字只描边
         borderText.setTextColor(getResources().getColor(R.color.border_text));  //设置描边颜色
         borderText.setGravity(getGravity());
     }
 
     @Override
     public void setLayoutParams (ViewGroup.LayoutParams params){
         super .setLayoutParams(params);
         borderText.setLayoutParams(params);
     }
 
     @Override
     protected void onMeasure( int widthMeasureSpec, int heightMeasureSpec) {
         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);
     }
 
     protected void onLayout ( boolean changed, int left, int top, int right, int bottom){
         super .onLayout(changed, left, top, right, bottom);
         borderText.layout(left, top, right, bottom);
     }
 
     @Override
     protected void onDraw(Canvas canvas) {
         borderText.draw(canvas);
         super .onDraw(canvas);
     }
 
}

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值