美文网首页Android学习Android手机移动程序开发
震惊!这个控件绝对值得收藏。轻松实现圆角、文字描边、状态指示等效

震惊!这个控件绝对值得收藏。轻松实现圆角、文字描边、状态指示等效

作者: CoorChice | 来源:发表于2017-02-08 19:29 被阅读2846次
    效果图

    简介

    RoundCornerTextView 继承自TextView。它拥有TextView的方法,并且进行了功能扩展。RoundCornerTextView 能够轻松的实现原本需要编写Shape 设置背景等繁琐操作才能实现的控件效果。因此,使用了RoundCornerTextView 之后能够使你不用频繁的创建Shape 或导入图片,节省了大量内存。

    主要功能

    通过组合RoundCornerTextView 的功能,能够创造出上面的效果图中的几种基本效果。当然,当你脑洞大开时能够创造更多有趣而奇怪的效果。下面将介绍RoundCornerTextView 的一些特性。

    使用前准备

    你可以在xml文件中直接设置RoundCornerTextView 的这些有趣的特有属性。当然,在此之前,你必须确保已经把RoundCornerTextView<declare-styleable> 的自定义属性加入到你项目中的attrs.xml中(点击这里寻找RoundCornerTextView的<declare-styleable>)。然后,你需要在布局文件的开头申明自定义命名空间xmlns:app="http://schemas.android.com/apk/res-auto"。现在,可以开始使用RoundCornerTextView 进行创作了。

    属性说明

    <RoundCornerTextView
        android:layout_width="50dp"
        android:layout_height="50dp"
        
        app:corner="25dp"  //设置圆角。会同时作用于填充和边框(如果边框存在的话)。如果要设置为圆形,只需要把该值设置为宽或长的1/2即可。                            
        app:solid="@color/red"  //设置填充颜色
        app:stroke_color="@color/black"  //设置边框颜色
        app:stroke_width="2dp" //设置边框的宽度。
    
        app:state_drawable="@drawable/vector_emoji_1"  //放置一个drawable在背景上。默认居中显示。
        app:state_drawable_mode="center" //设置drawable的显示模式。可选值如下:
        // left、top、right、bottom、center(默认值)、leftTop、rightTop、leftBottom、rightBottom、fill(充满整个RoundCornerTextView)
        app:isShowState="true" // boolean类型。是否显示drawable。这在控制状态时十分有用。
    
        app:text_stroke="true" // boolean类型。是否启用文字描边模式。注意,启用这个模式之后通过setTextColor()设置的颜色将会被覆盖。
        app:text_stroke_color="@color/black" // 文字的描边颜色。默认为Color.BLACK。
        app:text_stroke_width="1dp" // 文字描边的宽度。
        app:text_fill_color="@color/blue" // 文字填充的颜色。默认为Color.BLACK。
    
        app:autoAdjust="true" // boolean类型。是否启用自动调整功能。具体调整什么,需要在Java中为RoundCornerTextView实现一个TextAdjuster。
        //当你启用这个功能而没有实现自己的TextAdjuster时,RoundCornerTextView会启用默认的TextAdjuster。它会按照一定的规则调整文字大小。
        />
    
    

    以上这些属性,你均可以在Java中进行动态的设置。同时也能够获得它们的值。例如:

    mRoundCornerTextView.setCorner(10);
    mRoundCornerTextView.getCorner();
    

    TextAdjuster

    如果你实现了TextAdjuster ,它将会在绘制文字之前被调用。因此,你可以根据需求在文字绘制前进行一些操作,例如默认的字体大小调整。如果你希望停止这种变化,只需要调用setTextAdjuster(null)

    mRoundCornerTextView.setTextAdjuster(v->{
          // 在这里进行一些操作,它们将在文字开始被绘制的前一刻被执行
        });
    

    链接

    点击这里查看RoundCornerTextView的源码。

    如果你觉得还不错的话,那么感谢你关注我哦,或者给我点个赞哦。

    相关文章

      网友评论

      • 聞言:源码链接404?
        CoorChice:@聞言 看这篇:https://www.jianshu.com/p/1e07ad810369
      • f2631bd59014:楼主莫非是UC震惊部的:smile:
        CoorChice:@葉胖胖灬 哈哈,被发现了。这是旧版的,请看新版SuperTextView:wink:
      • Alex_Cin:楼主没有用到波纹效果,rippledrawable
        CoorChice:@Alex_Cin 对啊,所以有点方:joy:
        Alex_Cin: @CoorChice rippledrawable是5.0以后的,要兼容,就得自己画了,
        CoorChice:@Alex_Cin 啊哈哈,向下兼容有点方。有时间实现一下。

      本文标题:震惊!这个控件绝对值得收藏。轻松实现圆角、文字描边、状态指示等效

      本文链接:https://www.haomeiwen.com/subject/fnjbittx.html