android – 为字母的一部分着色的最佳方法是什么?

android – 为字母的一部分着色的最佳方法是什么?,第1张

概述我希望实现这样的目标: 首先想到的是在画布上绘制文本两次,并用形状覆盖第一个文本.但也许有更好的解决方案. 一种方法是使用PorterDuffXfermode在文本上合成蓝色矩形.您可以扩展TextView并覆盖onDraw()以在绘制文本后绘制矩形,并使用正确的模式(我相信XOR是您想要的那个)它应该达到预期的效果.像这样的东西: public class ProgressTextView ex 我希望实现这样的目标:

首先想到的是在画布上绘制文本两次,并用形状覆盖第一个文本.但也许有更好的解决方案.

解决方法 一种方法是使用PorterDuffXfermode在文本上合成蓝色矩形.您可以扩展TextVIEw并覆盖onDraw()以在绘制文本后绘制矩形,并使用正确的模式(我相信XOR是您想要的那个)它应该达到预期的效果.像这样的东西:

public class ProgresstextVIEw extends TextVIEw {    private static final float MAX_PROGRESS = ...;    private Paint mPaint;    public ProgresstextVIEw(Context context) {        super(context);        initPaint();    }    /* other constructor omitted,but do the same pattern in those */    private voID initPaint() {        mPaint = new Paint();        mPaint.setcolor(...);        mPaint.setXfermode(new PorterDuffXfermode(Mode.XOR));        // note: you may also need the following line if harDWare accel is available        setLayerType(LAYER_TYPE_SOFTWARE,null);    }    @OverrIDe    public voID onDraw(Canvas canvas) {        super.onDraw(canvas);        drawProgress(canvas);    }    private voID drawProgress(Canvas canvas) {        int w = getWIDth() - getpaddingleft() - getpaddingRight();        int h = getHeight() - getpaddingtop() - getpaddingBottom();        float progress = getProgress();        float rectW = w * (progress / MAX_PROGRESS);        int saveCount = canvas.save();        canvas.translate(getpaddingleft(),getpaddingtop());        canvas.drawRect(0,rectW,h,mPaint);        canvas.restoretoCount(saveCount);    }    private float getProgress() {        // Todo    }}

有关Porter / Duff合成的更多信息:http://ssp.impulsetrain.com/porterduff.html

总结

以上是内存溢出为你收集整理的android – 为字母的一部分着色的最佳方法是什么?全部内容,希望文章能够帮你解决android – 为字母的一部分着色的最佳方法是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1128118.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存