`

Android TextView 字体描边

阅读更多
package com.zg.mrcheney;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.widget.TextView;

public class StrokeText extends TextView {

    private float mBigFontBottom;
    private float mBigFontHeight;

    private String text;
    private Paint mPaint;
    private int strokeSize = 1;

    public StrokeText(Context context) {
        super(context);
        init();
    }

    public StrokeText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public StrokeText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    private void init() {
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setTextSize(getTextSize());
        mPaint.setColor(getResources().getColor(R.color.font_paint_color));
        FontMetrics fm = mPaint.getFontMetrics();
        mBigFontBottom = fm.bottom;
        mBigFontHeight = fm.bottom - fm.top;
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (strokeSize > 0 && strokeSize < 4) {
            float y = getPaddingTop() + mBigFontHeight - mBigFontBottom;
            canvas.drawText(text, 0, y - strokeSize, mPaint);
            canvas.drawText(text, 0, y + strokeSize, mPaint);
            canvas.drawText(text, 0 + strokeSize, y, mPaint);
            canvas.drawText(text, 0 + strokeSize, y + strokeSize, mPaint);
            canvas.drawText(text, 0 + strokeSize, y - strokeSize, mPaint);
            canvas.drawText(text, 0 - strokeSize, y, mPaint);
            canvas.drawText(text, 0 - strokeSize, y + strokeSize, mPaint);
            canvas.drawText(text, 0 - strokeSize, y - strokeSize, mPaint);
        }

        super.onDraw(canvas);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(text, type);
        this.text = text.toString();
        invalidate();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if (strokeSize > 0 && strokeSize < 4) {
            setMeasuredDimension(getMeasuredWidth() + strokeSize, getMeasuredHeight());
        }
    }

}


 

分享到:
评论

相关推荐

    Android字体描边Demo

    通过这种方式,我们可以在不依赖第三方库的情况下,为Android应用中的TextView添加自定义的字体描边效果。这不仅有助于提升界面的美观度,还能在一定程度上锻炼开发者对Android图形绘制的理解和运用能力。

    android 字体描边 实例代码

    在Android开发中,有时我们需要为应用的文本添加一些视觉效果,比如字体描边,来提升UI的观感和可读性。"android 字体描边 实例代码"这个主题就是关于如何在Android应用中实现文本描边的一个实例教程。在这个实例中...

    android文字描边功能的实现

    本文将详细介绍如何在Android应用中实现文字描边功能,主要涉及的技术点包括自定义View、TextView的扩展以及Paint对象的使用。 首先,为了实现文字描边,我们需要创建一个新的TextView子类,例如这里创建了一个名为...

    Android-MultipleTextView是一个通过重写TextView实现去除原生默认内边距并扩展了一些其他功能

    2. **自定义样式**:除了基本的文字颜色和字体大小,`MultipleTextView`可能提供了更多的自定义样式选项,如文本阴影、描边效果、渐变色等,让开发者可以更自由地定制文本外观。 3. **文本高亮**:为了突出显示部分...

    android 自定义TextView删除线

    TextView是Android UI框架中的一个基本组件,用于显示单行或多行文本。它支持多种格式,包括字体样式、颜色、大小、对齐方式等。在默认情况下,TextView不提供删除线的效果。 要实现自定义的删除线效果,我们需要...

    用paint画笔给TextView设置背景颜色和宽高

    在Android开发中,我们经常需要对UI元素进行自定义,以满足特定的设计需求。TextView作为显示文本的基础...在实际开发中,还可以结合其他Paint属性,如文字颜色、字体大小、描边效果等,进一步增强TextView的表现力。

    自定义带边框的TextView

    这里,你可以自定义TextView的大小、文本、字体大小以及内边距。 通过这种方式,我们创建了一个简单的自定义TextView,带有可配置的边框。然而,为了提高可复用性和灵活性,还可以添加更多特性,如支持通过属性动画...

    用文字替换小图标(TextView替换ImageView)

    对于自定义TextView,还可以通过自定义属性实现更复杂的样式控制,如内边距、描边等。 5. **兼容性**:确保所使用的字体库兼容目标设备的操作系统版本。虽然大部分现代设备都能很好地支持图标字体,但在较旧版本的...

    Android新手入门2016(16)--画图

    `Paint`包含了颜色、风格、字体大小、描边宽度等一系列属性,用于控制图形的外观。例如,你可以通过设置`Paint`的颜色来改变绘制的线条或填充色,通过调整`Paint`的`textSize`来改变文本的大小,通过`setStyle(Paint...

    IconFont for Android.zip

    在Android平台上,IconFont提供了两种主要的使用方式:TextView和Drawable。对于TextView方式,开发者可以将图标作为文本内容插入,通过设置字体家族来显示图标。这种方法使得图标能够与文字混合排列,方便进行文本...

    android 自定义圆形倒计时控件时间递减显示

    在这个案例中,我们可能会从TextView或者ImageView派生,因为它们都与显示文本或图像有关,而这正是倒计时控件的基础。 创建自定义控件的第一步是定义一个新的Java类,例如命名为`CircleCountdownView`,并继承自`...

    Android圆形百分比

    在Android中,我们通常使用XML布局文件来定义界面元素,如TextView、ProgressBar等。但是,对于圆形百分比的需求,标准的Android组件可能无法满足,因此我们需要创建一个自定义View来达到目的。 1. **自定义View**...

    Android基础控件——EditText的自定义、高仿iOS的UITextField

    在Android开发中,EditText是用于用户输入文本的基本控件,它是TextView的一个子类,提供了文本输入和编辑的功能。本文将深入探讨如何自定义EditText以及如何在Android应用中实现与iOS平台上的UITextField类似的视觉...

    Android应用源码之自定义控件入门级demo.zip

    `Paint`对象用于设置颜色、字体、描边等样式。 3. **测量与布局** `onMeasure()`方法中,通过`setMeasuredDimension()`设定控件的宽度和高度。在`onLayout()`方法里,可以设置子视图的位置。Android提供...

    Android中自定义控件View

    - 使用`Paint`对象设置颜色、字体、描边等属性,然后调用Canvas的方法进行绘制。 3. **触摸事件处理** - 如果需要处理触摸事件,可以重写`onTouchEvent()`方法。在这个方法中,根据MotionEvent的ACTION_DOWN、...

    自绘制View,摆脱android固定模块限制【高清视频教程】

    - **Paint**:设置颜色、字体、描边样式等属性,影响绘制效果。 - **Path**:创建复杂形状,支持直线、曲线等多种路径。 4. **动画与触摸事件处理** - **Animation**:Android提供了多种动画类型,如...

    Android SMS 短信内容显示在一个 泡泡 形状的窗口中.rar

    例如,我们可以设置填充颜色、描边宽度、文字颜色和字体大小等。 4. **测量与布局**: 在自定义视图中,需要重写`onMeasure()`方法来指定视图的大小。这很重要,因为Android需要知道视图应该占据多大的空间。通常,...

    SuperText 代码

    在Android开发中,`TextView` 是一个基础且重要的组件,用于显示单行或多行文本。然而,尽管`TextView`的功能已经相当丰富,但在实际应用中,开发者往往需要更定制化的文本展示功能,比如自定义字体、颜色、对齐方式...

    android粗体中文判断

    `setFakeBoldText(true)`方法是TextView的一个API,它通过增加文本的描边来模拟粗体效果。然而,这个方法在处理某些特定字体或语言时可能不会产生预期的结果,尤其是当设备上没有预装支持特定语言(如中文)粗体的...

Global site tag (gtag.js) - Google Analytics