当前位置:   article > 正文

[Android开发]镂空的TextView,镂空字体,TextView实现镂空字体效果_textview空心字体

textview空心字体

前言:本来是下班途中跟IOS的同事一起走在路上闲聊,他让我看了一个App的镂空字体效果,然后我俩讨论了几句,我当时已经有一个大体上的实现思路了,于是第二天就实现出来了,讲真的目前这玩意没有用到我开发中的项目,希望能帮到正在迷茫中的你。

8f3f0518e5c04620a8d929e7a8655347.jpeg

实现思路:

关键代码一定是PorterDuff.Mode.DST_OUT画笔来实现,我一般写自定义的View基本上以最小的代价完成功能,也就是尽可能利用Android控件中原本的功能,因此利用TextView继承重写onDraw去实现,废话不多说直接上代码:

  1. public class HollowTextView extends AppCompatTextView {
  2. private Drawable bgDrawable;
  3. public HollowTextView(@NonNull Context context) {
  4. super(context);
  5. }
  6. public HollowTextView(@NonNull Context context, @Nullable AttributeSet attrs) {
  7. super(context, attrs);
  8. }
  9. public HollowTextView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  10. super(context, attrs, defStyleAttr);
  11. }
  12. @Override
  13. protected void onDraw(Canvas canvas) {
  14. //直接拿TextView的画笔即可
  15. TextPaint textPaint = getPaint();
  16. //设置一个颜色背景否则可能会有点透明
  17. textPaint.setColor(Color.BLACK);
  18. //画笔模式这里要设置为空哦,否则多次绘制将变得不正常
  19. textPaint.setXfermode(null);
  20. //保存一个图层,这是关键代码
  21. canvas.saveLayer(new RectF(0, 0, canvas.getWidth(), canvas.getHeight()), textPaint, Canvas.ALL_SAVE_FLAG);
  22. //绘制背景
  23. drawBackground(canvas);
  24. //給画笔设置DST_OUT模式,即将开始调用父类TextView的onDraw了
  25. textPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
  26. //调用父类TextView的onDraw
  27. super.onDraw(canvas);
  28. }
  29. @Override
  30. public void setBackground(Drawable background) {
  31. //重写这个方法是为了不让父类中的背景被绘制出来,而是换成我们自己来绘制,这样背景还是可以利用Shape或者UI出图的方式实现
  32. bgDrawable = background;
  33. invalidate();
  34. }
  35. @Override
  36. public void setBackgroundDrawable(@Nullable Drawable background) {
  37. setBackground(background);
  38. }
  39. @Override
  40. public void setBackgroundResource(int resId) {
  41. setBackground(getContext().getResources().getDrawable(resId));
  42. }
  43. /**
  44. * 自己绘制背景
  45. * @param canvas
  46. */
  47. private void drawBackground(Canvas canvas) {
  48. final Drawable background = bgDrawable;
  49. if (background == null) {
  50. return;
  51. }
  52. background.setBounds(0, 0, getRight() - getLeft(), getBottom() - getTop());
  53. background.draw(canvas);
  54. }
  55. }

使用方式如下,你没看错使用起来和普通的TextView没有任何区别

  1. <com.flyjingfish.hollowtextviewlib.HollowTextView
  2. android:id="@+id/hollowTextView"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:paddingVertical="8dp"
  6. android:paddingHorizontal="40dp"
  7. android:text="Hello World!"
  8. android:gravity="center"
  9. android:textStyle="bold|italic"
  10. android:background="@drawable/bg_hollow"
  11. android:textSize="30sp"/>

关键代码就贴完了,我这个实现思路是可以让您还像原来使用TextView一样,去使用TextView毫无违和感,接下来给您看个更好玩的~

使用方式也很简单:

  1. <com.flyjingfish.hollowtextviewlib.HollowTextView
  2. android:id="@+id/hollowTextView3"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:text=" Hello World! "
  6. android:gravity="center"
  7. android:textStyle="bold"
  8. android:layout_marginTop="10dp"
  9. app:hollow_stroke_textColor="@color/white"
  10. app:hollow_stroke_strokeWidth="6dp"
  11. android:textSize="30sp"/>
  12. <com.flyjingfish.hollowtextviewlib.HollowTextView
  13. android:id="@+id/hollowTextView2"
  14. android:layout_width="wrap_content"
  15. android:layout_height="wrap_content"
  16. android:text=" Hello World! "
  17. android:gravity="center"
  18. android:textStyle="bold"
  19. android:layout_marginTop="10dp"
  20. app:hollow_stroke_angle="0"
  21. app:hollow_stroke_startColor="@color/purple_500"
  22. app:hollow_stroke_endColor="@color/teal_200"
  23. app:hollow_stroke_strokeWidth="6dp"
  24. android:textSize="30sp"/>

 这个就不多说了,大家可以看Github,欢迎Star~~~

https://github.com/FlyJingFish/HollowTextView

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

闽ICP备14008679号