textview 字体描边无效果
时间: 2023-10-12 10:05:10 浏览: 93
实现 TextView 字体描边的方法有多种,以下是一种常见的方法:
1. 在 res/values 文件夹下新建一个名为 attrs.xml 的文件,添加以下代码:
```
<resources>
<attr name="strokeWidth" format="dimension"/>
<attr name="strokeColor" format="color"/>
</resources>
```
2. 在 TextView 标签中添加以下属性:
```
<com.example.myapp.MyTextView
android:id="@+id/myTextView"
android:text="Hello World!"
android:textSize="24sp"
app:strokeWidth="2dp"
app:strokeColor="#000000"
android:textColor="#ffffff"/>
```
其中,MyTextView 是自定义的 TextView 类,继承自 android.widget.TextView。
3. 在 MyTextView 类中重写 onDraw 方法,实现字体描边的效果:
```
public class MyTextView extends TextView {
private float strokeWidth;
private int strokeColor;
public MyTextView(Context context) {
super(context);
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyTextView);
strokeWidth = a.getDimension(R.styleable.MyTextView_strokeWidth, 0);
strokeColor = a.getColor(R.styleable.MyTextView_strokeColor, Color.BLACK);
a.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
TextPaint paint = getPaint();
// 设置描边效果
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(strokeWidth);
paint.setColor(strokeColor);
// 画出描边效果
super.onDraw(canvas);
// 恢复原有的颜色和样式
paint.setStyle(Paint.Style.FILL);
paint.setColor(getCurrentTextColor());
super.onDraw(canvas);
}
}
```
注意,在重写 onDraw 方法时,需要先设置描边效果,再调用父类的 onDraw 方法画出描边效果,最后恢复原有的颜色和样式再次调用父类的 onDraw 方法,以保证正常显示字体。
阅读全文