当前位置:   article > 正文

超级简单的Android镂空文本方法_字体镂空安卓

字体镂空安卓

今年4月的时候,跟着大佬做一个大需求,手中分到一个比较新奇的小需求点:需要做一个镂空的Toast

话不多说,直奔主题~

项目描述:

1.相机类app,toast需要在预览界面展示出来;

2.toast颜色纯白,有微微透明度。

探路过程:

1.查询各位前辈的实现方法,给自己来点启发,看完觉得都有点复杂,于是准备自己着手写一个;

2.镂空文本最重要就是使用图层叠加,从重叠区域着手;

3.学习Android Paint Xfermode,可以控制叠加区域的内容展示(https://www.cnblogs.com/libertycode/p/6290497.html);

4.由于预览区域会有全是白色的情况,我们的设计还要求,镂空的文本后面还需要有一层背景,实现这个要求的方法是:

  叠加一个有透明度的背景图层,图层叠加的时候,将这个背景图层放在最下面就好;

代码实现思路:

1.继承TextView,重写onDraw方法;(也可以继承View,开销小,但是继承View自己要实现的东西太多,于是就使用了TextView);

2.在onDraw方法中,获取TextView的Paint,调用 

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT)),

 就可以在文字绘制的时候,擦除掉背景与文字重叠的区域,文本镂空就完成啦;

3.给镂空文本添加有透明度背景:

  镂空文本绘制完成以后,在cavas上绘制一个阴影图层,自己new一个paint,设置

paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER)),

 然后用这个paint来绘制阴影层,这时候,这个阴影层就可以显示在镂空文本的底层,至此,就完成这个小需求的所有要求啦~

PorterDuff.Mode

DST_OUT:只在源图像和目标图像不相交的地方绘制【目标图像】,在相交的地方根据源图像的alpha进行过滤,源图像完全不透明则完全过滤,完全透明则不过滤

DST_OVER:将目标图像放在源图像上方

以下是源代码,今天我自己重新写了一次,没有验证,哪位大哥要是发现有问题,请指正哈~~

public class HollowTextView extends AppCompatTextView {

    private Paint paint;

    public HollowTextView(Context context) {
        super(context);
    }

    public HollowTextView(Context context, @android.support.annotation.Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public HollowTextView(Context context, @android.support.annotation.Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        this.getPaint().setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
        paint = new Paint();
        paint.setColor(Color.parseColor("#22000000"));
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
        canvas.drawRect(0, 0, canvas.getWidth(), canvas.getHeight(), paint);
    }
}

 当时我们的toast有指定单行文本固定高度,在适配这个高度的时候,使用.9图的时候遇到了一个小坑,下次找时间记录一下下这个小坑~~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/73669
推荐阅读
相关标签
  

闽ICP备14008679号