从未如此惊艳!你好,SuperTextView

欢迎使用 SuperTextView,这篇文档将会向你展示如何使用这个控件来提高你构建项目的效率。

SuperTextView 继承自 TextView,它能够大量的减少布局的复杂程度,并且使得一些常见的效果变得十分容易实现且高效。同时,它内置了动画驱动,你只需要合理编写Adjuster,然后startAnim()就可以看到预期的动画效果。它仅仅是一个控件,所以你可以不费吹灰之力的在你的项目中集成使用。

2

特点

  1. 你从此不必再为背景图编写和管理大量<shape>文件了。
  2. 重新优化的状态图功能使得你能够精确的控制状态图的大小,以及在 SuperTextView中的位置。
  3. 支持设置圆角,并且能够精确的控制圆角位置。
  4. 能够轻松的实现控件边框效果。
  5. 支持文字描边,这使得空心文字效果成为了可能。
  6. 内置动画驱动,你只需配合 Adjuster 合理的使用即可。
  7. Adjuster 的出现,使得你对控件的绘制过程具有了掌控权,良好的设计使得它能够完美的实现绝大部分你脑海中的效果。

3

使用指南

支持的属性

SuperTextView 十分方便的支持在 xml 中直接设置属性,并且你能够立即看到效果。就像你平时使用 TextView 一样方便。

<SuperTextView
    android:layout_width="50dp"
    android:layout_height="50dp"

    //设置圆角。会同时作用于填充和边框(如果边框存在的话)。
    //如果要设置为圆形,只需要把该值设置为宽或长的1/2即可。
    app:corner="25dp"
    //设置左上角圆角
    app:left_top_corner="true"
    //设置右上角圆角
    app:right_top_corner="true"
    //设置左下角圆角
    app:left_bottom_corner="true"
    //设置右下角圆角
    app:right_bottom_corner="true"
    //设置填充颜色
    app:solid="@color/red"
    //设置边框颜色
    app:stroke_color="@color/black"
    //设置边框的宽度。
    app:stroke_width="2dp"
    //放置一个drawable在背景层上。默认居中显示。
    //并且默认大小为SuperTextView的一半。
    app:state_drawable="@drawable/emoji"
    //设置drawable的显示模式。可选值如下:
    // left、top、right、bottom、center(默认值)、
    //leftTop、rightTop、leftBottom、rightBottom、
    //fill(充满整个SuperTextView,此时会使设置drawable的大小失效)
    app:state_drawable_mode="center"
    //设置drawable的height
    app:state_drawable_height="30dp"
    //设置drawable的width
    app:state_drawable_width="30dp"
    //设置drawble相对于基础位置左边的距离
    app:state_drawable_padding_left="10dp"
    //设置drawble相对于基础位置上边的距离
    app:state_drawable_padding_top="10dp"
    // boolean类型。是否显示drawable。
    //如果你想要设置的drawable显示出来,必须设置为true。
    //当不想让它显示时,再设置为false即可。
    app:isShowState="true"
    //是否开启文字描边功能。
    //注意,启用这个模式之后通过setTextColor()设置的颜色将会被覆盖。
    //你需要通过text_fill_color来设置文字的颜色。
    app:text_stroke="true"
    // 文字的描边颜色。默认为Color.BLACK。
    app:text_stroke_color="@color/black"
    // 文字描边的宽度。
    app:text_stroke_width="1dp"
    // 文字填充的颜色。默认为Color.BLACK。
    app:text_fill_color="@color/blue"
    // boolean类型。是否启用Adjuster功能。
    //具体干什么,需要在Java中为SuperTextView实现一个Adjuster。
    //当你启用这个功能而没有实现自己的Adjuster时,
    //SuperTextView会启用默认的Adjuster。它会按照一定的规则调整文字大小。
    app:autoAdjust="true"
    />

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

mSuperTextView.setCorner(10);mSuperTextView.getCorner();

圆形和边框

为了实现上图效果,通常你需要编写和管理大量的<shape>文件。现在你只需要在 xml 或代码中对SuperTextView 直接进行设置即可。

不简单的圆角

不同于简单的圆角,SuperTextView 支持精确的控制圆角的位置。一个、两个、三个都没问题。一切由你掌控。

神奇的文字描边

文字描边从未如此简单!

高效的状态图

不同于原生的 Drawable,SuperTextView 对于 Drawable 提供了更多精细化的控制操作。你能够轻松的指定 Drawable 大小以及位置,只需一个属性就能搞定。

相信你一定深有感触,想要实现上图中的效果,往往需要嵌套多层布局(一般 3 层吧?)。而SuperTextView只需一个控件,并且十分简单高效的就能实现。它能够大量的减少你的App 中的布局复杂程度,减少视图树的绘制时间。

炸裂的 Adjuster

Adjuster 被设计用来在 SuperTextView 的绘制过程中插入一些操作。这具有非常重要的意义。比如,默认实现的 DefaultAdjuster 能够动态的调整文字的大小。当然,你可以用它来实现各种各样的效果。

想要 Adjuster 生效,你必须调用SuperTextView.setAutoAdjust(true)来启用 Adjuster 功能。当然,你可以所以方便的停止,通过调用SuperTextView.setAutoAdjust(false)。并且,你需要注意调用顺序,因为一旦调用了SuperTextView.setAutoAdjust(true),而Adjuster 没有被设置的话,将会启用默认的DefaultAdjuster(它能够动态的调整文字大小),直到你设置了你自己的 Adjuster

干预控件的绘制

实现一个 Adjuster 需要继承 SuperTextView.Adjuster,并且实现adjust(SuperTextView v, Canvas canvas)方法。Adjuster.adjust() 会在每次绘制过程中被调用,这意味着你能够不可思议的从外部干预控件的绘制过程。

public class YourAdjuster extends SuperTextView.Adjuster {

  @Override
  protected void adjust(SuperTextView v, Canvas canvas) {
    //do your business。
  }

}

注意,如果开启动画,你必须十分谨慎的编写 adjuster() 中的代码。因为动画会以 60 帧/每秒的速度进行绘制。这意味着,这个方法每秒会被调用 60 次!所以,千万不要在这个方法中重复的创建对象,会卡爆的!原因是短时间的大量将会引起【内存抖动】,导致 GC频繁发生。相关知识你可以看看我的这两篇文章:

  • Android内存基础——内存抖动

    http://www.jianshu.com/p/69e6f894c698

  • 用两张图告诉你,为什么你的App会卡顿?

    http://www.jianshu.com/p/df4d5ec779c8

响应触摸事件

如果你重载 Adjuster 的onTouch(SuperTextView v, MotionEvent event)方法,你将能够获得SuperTextView 的触摸事件。这是重要的一点,如果你想持续的对SuperTextView 的触摸事件进行处理,你必须使onTouch()返回true。否则你只能接收到一个 ACTION_DOWN 事件,而不是一个事件流。

public class YourAdjuster extends SuperTextView.Adjuster {

  @Override
  protected void adjust(SuperTextView v, Canvas canvas) {
    //do your business。
  }

  @Override
  public boolean onTouch(SuperTextView v, MotionEvent event) {
    //you can get the touch event.
    //If want to get a series of touch event, you must return true here.
  }

}

如此惊艳的效果

得益于 SuperTextView 内置的动画驱动,你能够结合 Adjuster 来实现难以置信的动画效果。一切只需要在你合理的编写好 Adjuster 后,调用startAnim()stopAnim()来启动/停止动画。

如你所见,上面的效果就是通过 Adjuster 来实现的。并且这种拔插式的设计,使得你能够随时在同一个SuperTextView 上使用新的 Adjuster,你所有需要做的事情就是创建一个新的 Adjuster,然后调用setAdjuster()

之前@Alex_Cin希望看到 Ripple 涟漪效果,所以在RippleAdjuster.java中,我演示了如何使用 Adjuster 和动画驱动配合实现上图的 Rippler 涟漪效果。【RippleAdjuster.java链接:https://github.com/chenBingX/SuperTextView/blob/master/app/src/main/java/com/coorchice/supertextview/SuperTextView/Adjuster/RippleAdjuster.java】

看,你可以使用 Adjuster 实现自己的 Ripple 效果。

指定A djuster 的层级

Adjuster 贴心的设计了控制作用层级的功能。你可以通过Adjuster.setOpportunity(Opportunity opportunity)来指定 Adjuster 的绘制层级。

在 SuperTextView 中,绘制层级被从下到上分为:背景层、Drawable 层、文字层 3 个层级。通过 Opportunity 来指定你的 Adjuster 想要插入到那个层级间。

public enum Opportunity {
      BEFORE_DRAWABLE, //背景层和Drawable层之间
      BEFORE_TEXT,     //Drawable层和文字层之间
      AT_LAST          //最上层}

三种类型的 Opportunity 示意图。

默认值是Opportunity.BEFORE_TEXT。即第二张图的示例。

事实上,只要你愿意,SuperTextView 就相当于一张画布,你可以在上面任意的挥洒你的创意。它能够让你专注于创作,而不用去在意编写那些无用麻烦的代码。

如何开始使用

  • 如果你喜欢 SuperTextView,希望能顺手在 Github 点个 star 哦!
  • 我一直在不定期的创作新的干货,想要上车只需进到我的【个人主页】点个关注就好了哦。发车喽~

目前,你可以 Clone 我的【Github 仓库 https://github.com/chenBingX/SuperTextView】,然后将app/src/main/java/com/coorchice/supertextview/SuperTextView/SuperTextView.java 复制到你的项目中,接着将 /app/src/main/res/values/attrs.xml 的 attrs.xml 文件中的SuperTextView 的属性整合到你的a ttrs.xml 中。

现在,你可以开始使用 SuperTextView 了。

SuperTextView 项目地址:

https://github.com/chenBingX/SuperTextView

时间: 2024-12-06 00:08:57

从未如此惊艳!你好,SuperTextView的相关文章

《古墓丽影10》PC版重磅更新:DX12画质惊艳!

<古墓丽影10>PC版重磅更新:DX12画质惊艳! <古墓丽影>系列的最新作品<古墓丽影:崛起>已经上市一周有余,相信不少玩家都已经通关.但现在,官方给了PC版玩家一个再度通关的绝佳理由--画质大幅提升. 今天,<古墓丽影:崛起>开发商面向PC版推送了重磅更新,主要加入对于DX12和VXAO技术支持,从而使游戏光影.细节纹理表现获得全面增强,而且画面流畅性也有所改善. 官方公布的数据显示,测试机型配置为I7-2600,GTX970显卡.在DX11的环境下,游

人生,懂得相知,相惜包容之心不易。若灵犀一处,注定单一的风景,那就让生命于孤独中,开成一朵惊艳的花来,所有的资本,独倾城于自己!百度几下,你就知道,还得问百度

人生,懂得相知,相惜包容之心不易.若灵犀一处,注定单一的风景,那就让生命于孤独中,开成一朵惊艳的花来,所有的资本,独倾城于自己! ————题记 又是下雨的天气,青石板的湿气寒生,缝隙边的小草,漫步一春,一夏,一秋,于这冬天,仿佛还在执意某个角落,安定一个归属,定要等到霜雪满天,才肯凋谢! 若可,我愿是丁香般的女子,无须为了谁而忧怨,更无需丈量光阴给予的深浅,只管停泊江南的一席之地,为自己开一扇幽窗,与书共知己.风来且沐浴,月倚枕边书:雨临相对盏,醉赋宋唐风:再植一盆盆的兰草,便可举杯邀月兰生慧,

20款惊艳的矢量花纹素材

1.三款时尚花卉花纹矢量图免费下载 查看内容>>下载>> 2.光芒四射的金色花纹背景矢量图 查看内容>>下载>> 3.怀旧风格的花纹边框矢量图 查看内容>> 下载>> 4.四款时尚欧式边框矢量图 查看内容>>  下载>> 5.三款漂亮的紫藤花边边框矢量图 查看内容>> 下载>> 6.一款精美的心形花边素材矢量图 查看内容>> 下载>> 7.两款彩色线条素材矢量图

算法之美---100幅由程序生成的图像,总有一幅让你感到惊艳[下]

来看看算法能生成什么样的图像,继续发余下的50幅.这50幅图像中大部分与分形有关,算法难度要比前50幅大一些,当然其视觉效果会更为惊艳.所有图像均由我开发的软件“Why数学图像生成工具”生成. (51)Sharp Edges (52)Binary Flash (53)Mandelbrot 1 (54)Mandelbrot By Martin (55)Mandelbrot By Kasten (56)Mandelbrot By Lehman (57)Julia Sets 1 (58)Julia S

惊艳的cygwin——Windows下的Linux命令行环境的配置和使用

http://www.tuicool.com/articles/2MramqI 时间 2014-07-29 09:28:36  点滴之间 聚沙成金 原文  http://www.path8.net/tn/archives/6021 主题 CygwinLinux命令 本文内容遵从 CC版权协议 , 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://oldratlee.com/post/2012-12-22/stunning-cygwin N年前倒腾过一次 

漂亮的女人惊艳世界,伟大的女人改变世界

生而为人,多数人都不是含着金钥匙出生于名门望族,也并非出身于三餐不饱的寒门之地. 我们多是像她一样,生来就是平凡的普通人. 这个叫萨尔玛·贝娜妮的姑娘于1978年5月10日出生在北非国家摩洛哥.跟你我一样,她是一个再平凡不过的姑娘,但3岁那年母亲去世,让她比普通人更加可怜. 年幼的姑娘离开她那当老师的父亲,跟随外婆长大. 人总要努力一些,珍惜生命中所有的机会,才能活出自己想要的样子. 在阿拉伯国家摩洛哥,女性的地位低得可怜,有多可怜?就连国家的第一夫人都不能在公众场合抛头露面,至于平民家的女性?

中科燕园GIS外包团队(手机:13261043797,QQ:1216807928)arcgis10.3惊艳亮相

美国时间2014年12月10日,ArcGIS 10.3正式发布.这是Esri自2012年发布ArcGIS 10.2之后,历时两年的成果结晶.ArcGIS 10.3,隆重推出以用户为中心(Named User)的全新授权模式,超强的三维“内芯”,革新性的桌面GIS应用,可配置的服务器门户,即拿即用的Apps,更多应用开发新选择,数据开放新潮流,为构建新一代Web GIS应用提供了更强有力的核“芯”支持. 惊艳1:以用户为中心(Named User)的授权模式 ArcGIS 10.3采用了全新授权模

MNC:惊艳时光的推荐!

新栏目了! MUSIC NEW COLUMN 总有一些歌令人难忘. 就像有些人惊艳了时光. 或许制作它们的人并不是那么的棒 但是,他们的手里却诞生了如此美妙的 令人难忘的那些音乐. 一.2017/07/16 Glorious morning 二.2017/07/16 Summer 三.2017/07/16 道标

迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上)【转载】

转自: DBAplus社群 http://www.toutiao.com/m5762164771/ 迄今最安全的MySQL?细数5.7那些惊艳与鸡肋的新特性(上) - 今日头条(TouTiao.com)http://toutiao.com/a6300616158581604609/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=4592472790&