android文字描边功能的实现

这里也要简单说一下,这些小模块并不是我原创,也是当时查资料找到的,由于时间比较久,原文链接已经忘记了,所以这里就不列出引用链接了。不过这些代码我都修改、完善过,也添加了一些注释,希望对大家有帮助。

文字描边这个功能挺实用的,如果是单一背景下显示文字,文字描边也可起到装饰作用。如果是复杂背景下,尤其是在不同图片背景下显示文字,因为文字颜色很容易和图片背景相似,这样导致文字看不清楚,用户体验不佳。如果文字经过不同颜色描边后,文字轮廓部分一种颜色,文字内部另一种颜色,因为一般情况下,图片要么和文字轮廓颜色相近,要么和文字内部颜色相近,这样不管图片背景多复杂,文字都会整体显示。

我这里使用的方法是重写TextView方式。

下面是相关代码,整体比较简单,很容易懂。

继承的TextView文字描边类如下:

public class StrokeTextView extends TextView
{
 private TextView outlineTextView = null;

  public StrokeTextView(Context context)
  {
    super(context);

    outlineTextView = new TextView(context);
    init();
  }

  public StrokeTextView(Context context, AttributeSet attrs)
  {
    super(context, attrs);

    outlineTextView = new TextView(context, attrs);
    init();
  }

  public StrokeTextView(Context context, AttributeSet attrs, int defStyle)
  {
    super(context, attrs, defStyle);

    outlineTextView = new TextView(context, attrs, defStyle);
    init();
  }

  public void init()
  {
    TextPaint paint = outlineTextView.getPaint();
    paint.setStrokeWidth(3);// 描边宽度
    paint.setStyle(Style.STROKE);
    outlineTextView.setTextColor(Color.parseColor("#45c01a"));// 描边颜色
    outlineTextView.setGravity(getGravity());
  }

  @Override
  public void setLayoutParams (ViewGroup.LayoutParams params)
  {
    super.setLayoutParams(params);
    outlineTextView.setLayoutParams(params);
  }

  @Override
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
  {
   super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    // 设置轮廓文字
   CharSequence outlineText = outlineTextView.getText();
    if (outlineText == null || !outlineText.equals(this.getText()))
    {
     outlineTextView.setText(getText());
      postInvalidate();
    }
    outlineTextView.measure(widthMeasureSpec, heightMeasureSpec);
  }

  @Override
  protected void onLayout (boolean changed, int left, int top, int right, int bottom)
  {
    super.onLayout(changed, left, top, right, bottom);
    outlineTextView.layout(left, top, right, bottom);
  }

  @Override
  protected void onDraw(Canvas canvas)
  {
   outlineTextView.draw(canvas);
    super.onDraw(canvas);
  }
}

布局文件如下:

<com.my.teststroketextview.StrokeTextView
    android:id="@+id/test_stroketextview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:textSize="25sp"
    android:textColor="@color/dark_gray"
    android:text="@string/hello_world" />

调用代码如下:

private StrokeTextView test_stroketextview = null;

@Override
protected void onCreate(Bundle savedInstanceState)
{
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 test_stroketextview = (StrokeTextView)findViewById(R.id.test_stroketextview);
 test_stroketextview.setText("Hello world!");
}

如果想更改文字描边宽度,或者描边颜色,需要修改上面的StrokeTextView类,当然也可以把这个类设计的更灵活些,这样就可以动态的修改描边宽度或者描边颜色。

以上就是android中文字描边功能的实现实例,希望本文对大家学习android开发有所帮助。请大家多多支持我们。

(0)

相关推荐

  • Android编程开发之TextView文字显示和修改方法(附TextView属性介绍)

    本文实例讲述了Android编程开发之TextView文字显示和修改方法.分享给大家供大家参考,具体如下: 一. 新建一个Activity 和 Layout 首先在layout文件夹中新建一个activity_main.xml,在新建工程的时候一般默认会新建此xml文件,修改其代码如下: activity_main.xml 代码 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" x

  • Android开发技巧之像QQ一样输入文字和表情图像

    EditText和TextView一样,也可以进行图文混排.所不同的是,TextView只用于显示图文混排效果,而EditText不仅可显示,也可混合输入文字和图像,让我们先回顾一下图5.2所示的QQ聊天输入框,在输入框中可以同时输入文字和表情图像.实际上,这种效果在Android SDK中只需要几行代码就可以实现.为了使读者更有学习的冲动,先来欣赏一下即将实现的效果,如图5.16所示. 图5.16 在EditText控件中输入文字和图像 为了实现这个程序,首先来准备一些要用到的素材,也就是要在

  • Android实现图片文字轮播特效

    本文实例讲解了Android实现图片文字轮播特效的详细代码,分享给大家供大家参考,具体内容如下 图片轮播是类似知乎日报上的一个轮播效果,如下图. 好了直接进入正题,首先是出示一下效果: MainActivity: import java.util.ArrayList; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;

  • Android实现文字和图片混排(文字环绕图片)效果

    本文实例讲述了Android实现文字和图片混排(文字环绕图片)效果.分享给大家供大家参考,具体如下: 在平时我们做项目中,或许有要对一张图片或者某一个东西进行文字和图片说明,这时候要求排版美观,所以会出现文字和图片混排的情况,如图: 这种情况就是上下两个文字说明是连续在一起的,这就要求我们计算上面的文字说明怎么和下面的文字说明连贯结合在一起呢,这就要求我们进行计算了,下面给出代码,代码中也有详细的注释,原理也很简单. 因为算是比较简单,直接就在activity中去计算了: package com

  • android TextView设置中文字体加粗实现方法

    英文设置加粗可以在xml里面设置: 复制代码 代码如下: <SPAN style="FONT-SIZE: 18px">android:textStyle="bold"</SPAN> 英文还可以直接在String文件里面直接这样填写: 复制代码 代码如下: <string name="styled_text">Plain, <b>bold</b>, <i>italic</

  • android文字描边功能的实现

    这里也要简单说一下,这些小模块并不是我原创,也是当时查资料找到的,由于时间比较久,原文链接已经忘记了,所以这里就不列出引用链接了.不过这些代码我都修改.完善过,也添加了一些注释,希望对大家有帮助. 文字描边这个功能挺实用的,如果是单一背景下显示文字,文字描边也可起到装饰作用.如果是复杂背景下,尤其是在不同图片背景下显示文字,因为文字颜色很容易和图片背景相似,这样导致文字看不清楚,用户体验不佳.如果文字经过不同颜色描边后,文字轮廓部分一种颜色,文字内部另一种颜色,因为一般情况下,图片要么和文字轮廓

  • Android自定义View实现简单文字描边功能

    本文实例为大家分享了Android实现简单文字描边功能的具体代码,供大家参考,具体内容如下 效果图: 实现代码: package com.example.zhangyu.myview.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.

  • Android 自定义控件实现显示文字的功能

    Android 自定义控件实现显示文字的功能 自定义控件-–逐个显示文字 ONE Goal ,ONE Passion ! 前言: 今天要实现的效果时.让我们的文字一个一个显示出来.上效果图吧: 实现原理: 1,拿到要显示的文字. 2,计算文字显示的速率 字体显示的速度 v = 总的字体长度 / 总的显示时间 3,将文字根据速率显示到控件上. 自定义View: public class printTextView extends TextView { /** * 字体显示出来的时间 */ priv

  • Android开发实现自动切换文字TextSwitcher功能示例

    本文实例讲述了Android开发实现自动切换文字TextSwitcher功能.分享给大家供大家参考,具体如下: 介绍: 1.TextSwitcher是ViewSwicher的一个子类,继承了ViewSwicher的所有方法 2.与ViewSwitcher的另一个子类类似,TextSwitcher也有 3.ImageSwitcher不同的是:TextSwitcher的ViewFactory方法的 makeVieW() 必须放回一个TextXiew组件. 具体效果: 放射思维: 如果将其和轮播图(h

  • Android开发实现ListView和adapter配合显示图片和文字列表功能示例

    本文实例讲述了Android开发实现ListView和adapter配合显示图片和文字列表功能.分享给大家供大家参考,具体如下: 实际效果: 布局文件: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc

  • iOS基于 UILabel实现文字添加描边功能

    可以达到文字描一圈黑边的效果: 继承UILabel以后重载drawTextInRect: - (void)drawTextInRect:(CGRect)rect { CGSize shadowOffset = self.shadowOffset; UIColor *textColor = self.textColor; CGContextRef c = UIGraphicsGetCurrentContext(); CGContextSetLineWidth(c, 1); CGContextSet

  • Android实现搜索功能并本地保存搜索历史记录

    本文实例为大家分享了Android实现搜索功能,并且需要显示搜索的历史记录,供大家参考,具体内容如下 效果图: 本案例实现起来很简单,所以可以直接拿来嵌入项目中使用,涉及到的知识点: - 数据库的增删改查操作 - ListView和ScrollView的嵌套冲突解决 - 监听软键盘回车按钮设置为搜索按钮 - 使用TextWatcher( )实时筛选 - 已搜索的关键字再次搜索不重复添加到数据库 - 刚进入页面设置软键盘不因为EditText而自动弹出 代码 RecordSQLiteOpenHel

  • Android实现记事本功能

    本文实例为大家分享了Android实现记事本功能的具体代码,供大家参考,具体内容如下 实现功能 1.文本数据的存储 2.图片数据存储 3.视频数据存储 4.自定义的Adapter 5.SQlite的创建 6.数据listview列表的显示 demo地址 记事本 界面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.

  • android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer 的周期任务. - 在布局文件中添加一个TextView和Button控件,并在onCreate方法中获得到TextView和Button的id: xml布局代码: <Button android:id="@+id/button_start_timer" android:layout_

  • Android 偷拍功能实现(手机关闭依然拍照)详解及实例代码

     Android 偷拍功能/手机关闭能拍照 效果如下: 其实偷拍与偷录实现方式是一样的,都是使用到的WindowManager来绘制桌面小控件的原理.那我就不多说了- 一.首先我们需要一个SurfaceView: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo

随机推荐