Git 广告
您好,开发者,欢迎使用SuperTextView !
感谢您和数以万计的Android开发者对我的信任?。
SuperTextView的不同之处在于它只是一个简单的视图元素,而不仅仅是一个视图。
它充满活力,具有强大的嵌入式逻辑,持续为您提供丰富但异常简单的开发支持。
SuperTextView使您免于复杂的渲染逻辑。简单的API方法调用,炫丽的渲染效果即刻呈现。
您只需享受自己编写的令人惊叹的视觉效果即可,其余的将交给SuperTextView 。
?点击此处(或扫描下方二维码)下载Demo
【传送门】:《SuperTextView开发参考文档》-您可以学习如何使用SuperTextView更高效地构建您的应用程序
【传送门】:《SuperTextView API文档》——可以查看SuperTextView所有可用的api和属性
将其添加到您的 build.gradle 中:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.chenBingX:SuperTextView:VERSION_CODE'
}
最新版本的版本代码可以在这里找到。
v3.2.6支持: armeabi-v7a
v3.2.6.64支持: armeabi-v7a
、 arm64-v8a
v3.2.6.99支持: armeabi-v7a
、 arm64-v8a
、 x86
proguard-rules.pro
请添加-keep class com.coorchice.library.gifdecoder.JNI { *; }
在 XML 中,使用“网络图像”作为背景图像
< com .coorchice.library.SuperTextView
android:id =" @+id/stv_40 "
android:layout_width =" 150dp "
android:layout_height =" 150dp "
android:layout_gravity =" center_horizontal "
android:layout_marginTop =" 16dp "
android:gravity =" bottom|center "
android:paddingBottom =" 1dp "
android:text ="网络背景图"
android:textColor =" #000 "
android:textSize =" 14sp "
app:stv_corner =" 10dp "
app:stv_isShowState =" true "
app:stv_drawableAsBackground =" true "
app:stv_solid =" #f1f1f1 "
app:stv_state_drawable =" https://gw.alicdn.com/imgextra/i3/O1CN01suhAFr1cXQX49D2xp_!!6000000003610-0-tps-468-466.jpg " />
在 XML 中,为 StateDrawable2 设置“网络图像”
< com .coorchice.library.SuperTextView
android:id =" @+id/stv_41 "
android:layout_width =" 350dp "
android:layout_height =" 100dp "
android:layout_gravity =" center_horizontal "
android:layout_marginTop =" 30dp "
android:paddingLeft =" 116dp "
android:paddingTop =" 30dp "
android:text =" StateDrawable2 网络图"
android:textColor =" @color/black "
android:textSize =" 14sp "
app:stv_corner =" 50dp "
app:stv_isShowState2 =" true "
app:stv_left_bottom_corner =" true "
app:stv_left_top_corner =" true "
app:stv_solid =" #f1f1f1 "
app:stv_state_drawable2 =" https://gw.alicdn.com/imgextra/i3/O1CN01XPmcmt1vJfKcQ8o6O_!!6000000006152-0-tps-500-500.jpg "
app:stv_state_drawable2_height =" 100dp "
app:stv_state_drawable2_mode =" left "
app:stv_state_drawable2_width =" 100dp " />
stv_pressBgColor
无效修复Drawable直接写入十六进制颜色值,不显示的问题
对指定图层的 Drawable 支持
<com.coorchice.library.SuperTextView
...
// Configuring the level of Drawable1
app:stv_state_drawable_layer="beforeText"
// Configuring the level of Drawable2
app:stv_state_drawable2_layer="afterText"
...
/>
支持方式:
- `beforeText`,Before the text
- `afterText`,After the text
Java有相应的函数支持动态配置。
固定Drawable1为背景图时缩放模式scaleType开关失效问题
优化文字笔画
优化透明gif的显示
在新的v3.2.0
版本中, SuperTextView再次重新定义了自己。开发者们,看看为你们准备的惊喜吧!???
这次, SuperTextView为开发者带来了强大的Gif驱动支持。
如果过去你一直在为如何在Android平台上显示Gif图表而苦恼,或者你陷入了一些三方Gif库的性能深渊。但现在, SuperTextView将彻底改变这种状况。
Gif和SuperTextView自然而然,因此您可以用最熟悉、最自然的方式显示Gif图。就像平常显示一张普通图片一样简单。
得益于c/c++的超高性能和内存的精确操作。 SuperTextView使用c/c++为移动平台定制了强大的Gif驱动引擎。
SuperTextView的Gif引擎,可以精确操作图像像素内存,在Gif图像帧刷新时只更新本地像素内存,这使得Gif图像渲染效率得到了质的飞跃。
通过异步离屏渲染技术, SuperTextView即使在显示大型Gif图片时,也能保证流畅流畅的应用界面和灵敏的响应速度。
在上面的Demo中,使用SuperTextView显示了一个265帧图像的Gif图像,但用户界面仍然非常流畅。
在SuperTextView中显示Gif图,超级简单!
您可以直接在XML布局文档中配置它或将其添加到您的代码中。
<com.coorchice.library.SuperTextView
android:id="@+id/stv_1"
android:layout_width="match_parent"
android:layout_height="150dp"
app:stv_state_drawable="@drawable/gif_1" />
您可以像配置普通图像一样显示SuperTextView配置的Gif图。
stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setDrawable(R.drawable.gif_1);
就是这么简单、自然, SuperTextView可以让开发者在没有任何意识的情况下显示Gif图。
在SuperTextView的内核逻辑中, SuperTextView智能地对普通图和Gif图进行分类,然后进行相应的处理和优化。
如果您的Gif不在本地而是在云端怎么办?
你不用担心!一切都交给SuperTextView 。
stv_1 = (SuperTextView) findViewById(R.id.stv_1);
stv_1.setUrlImage("http://example.com/images/example.gif");
只需一行代码, SuperTextView就会在后台协助您加载Gif图像,然后处理渲染到屏幕上。
事实上, SuperTextView的Drawable1和Drawable2图像显示位可以用来显示Gif图像。总之,一切都是你所熟悉的。
SuperTextView不仅可以显示Gif ,还可以控制更多细节。
您可以随时控制Gif 、播放或暂停。
if (stv.getDrawable() instanceof GifDrawable) {
// Get the GifDrawable first
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// Play
gifDrawable.play();
// Pause
gifDrawable.stop();
}
在SuperTextView中,您始终可以到达您指定的帧的图像,以及可以提取到指定帧的图像。
if (stv.getDrawable() instanceof GifDrawable) {
// Get the GifDrawable first
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// Jump to the specified frame
gifDrawable.gotoFrame(pre);
// Get the specified frame
Bitmap frame = gifDrawable.getFrame(i);
}
由于SuperTextView可以支持本地增量渲染,当你的Gif支持这种渲染模式时,意味着你可能需要通过调用
gifDrawable.setStrict(true)
来启用**严格模式,以确保跳帧或帧提取图像正确。这可能需要一些时间,因此您应该尝试在异步线程中执行严格模式下的操作。
SuperTextView允许您随意修改Gif图表的播放速率。
if (stv.getDrawable() instanceof GifDrawable) {
// Get the GifDrawable first
GifDrawable gifDrawable = (GifDrawable) stv.getDrawable();
// Set the frame playback interval, 20 ms
gifDrawable.setFrameDuration(20);
}
使用SuperTextView您可以一睹Gif的信息。
获取Gif大小
// Get width
int width = gifDrawable.getWidth();
// Get height
int height = gifDrawable.getHeight();
获取Gif帧信息
// Get the number of frames
int frameCount = gifDrawable.getFrameCount();
// Get the current frame interval
int frameDuration = gifDrawable.getFrameDuration();
// Get the current render to that frame
int framePotision = gifDrawable.getCurrentFrame();
// Whether it is playing
boolean isPlaying = gifDrawable.isPlaying();
**SuperTextView**和**Gif**凭借无缝集成的方式渲染,之后**Drawable1**和**Drawable2**中的所有配置项在显示**Gif**图时也同样可以生效。
app:stv_state_drawable_rotate="90"
我们来看看Gif在原来的Drawable位置是怎么回事。
<com.coorchice.library.SuperTextView
android:layout_width="match_parent"
android:layout_height="50dp"
android:paddingLeft="62dp"
android:paddingRight="10dp"
android:text="小火箭发射了!啦啦啦啦啦啦..."
android:textColor="#ffffff"
android:textSize="22dp"
app:stv_corner="6dp"
app:stv_isShowState="true"
app:stv_solid="#0D1831"
// set Gif
app:stv_state_drawable="@drawable/gif_1"
// set Gif height
app:stv_state_drawable_height="40dp"
// set Gif width
app:stv_state_drawable_width="40dp"
// set Gif to left
app:stv_state_drawable_mode="left"
// set Gif left spacing
app:stv_state_drawable_padding_left="10dp"/>
效果是...
现在让我们尝试将Gif旋转 90 度。
<com.coorchice.library.SuperTextView
...
// set Gif to rotate 90 degrees
app:stv_state_drawable_rotate="90"
...
/>
SuperTextView令人难以置信的实现Gif图的圆角为开发者打开了一扇新的大门。
然而,这种效果的实现却出奇的简单。
<com.coorchice.library.SuperTextView
android:layout_width="185dp"
android:layout_height="138.75dp"
android:layout_gravity="center_horizontal"
app:stv_corner="20dp"
// set Gif as the control background
app:stv_drawableAsBackground="true"
app:stv_scaleType="fitCenter"
// Configuring Gif
app:stv_state_drawable="@drawable/gif_1" />
开发人员甚至可以轻松地为Gif添加边框。
<com.coorchice.library.SuperTextView
android:layout_width="350dp"
android:layout_height="148.4dp"
android:layout_gravity="center_horizontal"
android:gravity="center"
// add the text will be more stylish
android:text="SuperTextView"
android:textSize="36dp"
android:textStyle="bold"
android:visibility="invisible"
app:stv_corner="6dp"
app:stv_drawableAsBackground="true"
app:stv_isShowState="true"
app:stv_scaleType="center"
// Set the border color
app:stv_stroke_color="@color/opacity_8_gray_4c
// Set the border width
app:stv_stroke_width="5dp"
app:stv_text_fill_color="#ccffffff"
app:stv_text_stroke="true"
app:stv_text_stroke_color="#cc000000"
app:stv_text_stroke_width="2dp"
// Configuring Gif
app:stv_state_drawable="@drawable/gif_1"/>
效果瞬间呈现……
过去,一些很酷的动态常常止步于实施的复杂性和成本。而SuperTextView给你带来了更多的可能性,你的灵感可以自由发挥。
例如,动态头像的实现将比以往更加简单。
<com.coorchice.library.SuperTextView
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="30dp"
app:stv_corner="40dp"
// Set as background image
app:stv_drawableAsBackground="true"
// Configure Gif avatar
app:stv_state_drawable="@drawable/gif_avatar"
// Add border
app:stv_stroke_color="#ffffff"
app:stv_stroke_width="3dp"
/>
在代码中,可以直接配置网页动态头像。
stv.setUrlImage("http://gif_avatar.gif");
在新版本的SuperTextView中, Drawable1和Drawable2被赋予了新的能力——支持精确点击。
SuperTextView通过监听点击动作发生的位置,可以准确定位点击动作发生的区域( Drawable1 、 Drawable2或其他区域),然后触发相应的监听回调。
您可以为SuperTextView在Drawable上设置点击动作监听器,以便在动作发生时做出准确的响应。
stv.setOnDrawableClickedListener(new SuperTextView.OnDrawableClickedListener() {
@Override
public void onDrawable1Clicked(SuperTextView stv) {
// Drawable1 clicked,do something...
}
@Override
public void onDrawable2Clicked(SuperTextView stv) {
// Drawable2 clicked,do something...
}
});
stv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Non-Drawable area is clicked, do something...
}
});
现在,当您使用Drawable1作为背景图片时,您可以为其配置不同的缩放模式,以达到您喜欢的效果。
stv.setScaleType(ScaleType.CENTER);
SuperTextView为开发者提供了多达3种缩放模式:
ScaleType.FIT_XY
将图片拉伸至平铺。
ScaleType.FIT_CENTER
自适应地将图像居中。
ScaleType.CENTER
居中裁剪图片。默认值。
在XML布局文档中, Drawable1和Drawable2现在支持直接设置颜色或ShapeDrawable 。
// Circle_f9ad36 is a shape file written in xml
app:stv_state_drawable="@drawable/circle_f9ad36"
// Use solid color as Drawable
app:stv_state_drawable="#000000"
渲染性能比过去至少提高了30% 。
升级默认图片加载引擎,支持智能缓存。也许现在,你不必引入第三方图像加载库了。
SuperTextView旨在帮助 Android 开发者更高效、便捷、优雅地开发 Android 应用程序。
现在善意再次升级。新的SuperTextView将为Android开发者开启更多的可能性,并且一如既往, SuperTextView将带来更高效的功能。
SuperTextView的这次更新为StateDrawable添加了神奇而强大的着色功能。开发人员可以轻松更改图标的颜色,而无需向项目添加不同颜色的图标。这项技术将给你的Android应用程序一个瘦身的机会。
# modify the drawable color
app:stv_state_drawable_tint="@color/gray"
# modify the drawable2 color
app:stv_state_drawable2_tint="@color/red"
通过这样简单的一行代码,您就可以立即赋予图片改变的力量。当然,您想要的任何颜色都取决于您。这一切都发生了,不需要再介绍另一张图了。
在Java代码中,有与之对应的set/get函数,这样开发者就可以随时施展魔法,改变一张图片的颜色。
StateDrawable 的增强功能不仅仅限于颜色转换。 SuperTextView 被赋予了改变 StateDrawable 形状的能力。通过同一张图片,开发者可以组合出无限多种可能性。
只需几行代码,您就可以根据需要变换任何图片。
# Modify the drawable's rotation
app:stv_state_drawable_rotate="90"
# Modify the drawable's rotation
app:stv_state_drawable2_rotate="90"
不需要复杂的代码, SuperTextView一如既往的简单优雅。
同样,在Java代码中,也提供了相应的set/get函数。
这一能力可以有效帮助开发者将Android应用程序的体积压缩到极致。
这就是渐变文字!
SuperTextView提供的可能是迄今为止实现渐变文本的最简单而优雅的解决方案。通过简单的配置,就可以实现炫酷的渐变文字效果。
# Whether to enable gradient text
app:stv_textShaderEnable="true"
# Set the starting color of the text
app:stv_textShaderStartColor="@color/red"
# Set the ending color of the text
app:stv_textShaderEndColor="@color/yellow"
# Set the gradient mode of the text
# leftToRight:left -> right
# rightToLeft:right -> left
# topToBottom:top -> bottom
# bottomToTop:bottom -> top
app:stv_textShaderMode="leftToRight"
这些属性还提供了Java中的set/get接口,方便开发者随时修改。
调节器添加了两个新功能:
onAttach()
:当Adjuster设置为SuperTextView时将被调用。onDetach()
:当从SuperTextView中删除调整器时将被调用。通过在Adjuster中重写这两个函数,开发者可以在适当的时候进行状态注册、初始化、注销、资源释放等操作。
public class MyAdjuster extends SuperTextView.Adjuster{
@Override
protected void adjust(SuperTextView superTextView, Canvas canvas) {
}
@Override
public void onAttach(SuperTextView stv) {
// will be called when the modifier is added to a SuperTextView
}
@Override
public void onDetach(SuperTextView stv) {
// will be called when the Adjuster is removed from SuperTextView
}
}
该函数允许开发者获取SuperTextView中的所有调整器。如果SuperTextView中没有Adjuster ,则返回null。
SuperTextView的所有属性现在都以stv_
为前缀。
这样可以避免开发者引入其他第三方库时与SuperTextView可能生成的属性名称冲突。
如果开发者当前使用的是以前版本的SuperTextView ,那么升级到新版本后,需要在所有 xml 中的属性前面加上stv_
前缀。
app:corner="10dp"
corner是旧版本中的属性名称。升级到新版本后,需要在前面添加stv_
前缀,成为stv_corner
。
如果开发人员使用AndroidStudio ,请从Edit > Find > Replace
打开批量替换对话框,然后按照以下说明进行操作。
如果只有SuperTextView在开发者的项目中使用相同的命名空间(例如app
),那么幸运的是,您可以简单地将app:
替换为app:stv_
。
从SuperTextView v2.0 开始, setAdjuster(Adjuster)
函数被标记为要删除的状态,并添加了新函数addAdjuster(Adjuster)
。
新版本中, setAdjuster(Adjuster)
函数将被正式移除。如果开发者之前使用过该方法,请将其更改为addAdjuster(Adjuster)
。
dependencies {
compile 'com.github.chenBingX:SuperTextView:v3.1.1'
}
如今, SuperTextView已具备圆角、边框、描边、按变色、多状态图、圆角图、多功能调整器、加载网络图片等一系列常见功能。得益于此,开发者可以轻松实现各种非常繁琐的效果,节省大量的开发时间,有效降低页面的复杂度,降低项目维护成本。
写代码吧,应该是那么的赏心悦目吧!
早在几个月前,就有不少开发者向CoorChice建议是否可以让SuperTextView具备加载网络图片的能力。其实这也是CoorChice很早之前就考虑过的,不过在SuperTextView的早期,完善其核心功能仍然是首要目标,所以一直没有涉及到图像相关的功能。
直到上一个大版本SuperTextView v2.0, CoorChie尝试添加图片显示功能。这使得SuperTextView的范围得到了扩展,并且能够为图片添加笔画、圆角和状态图。相关文档可以在以下链接找到:
【你好,SuperTextView】 - https://www.jianshu.com/p/1b91e11e441d
这次,我得到了开发商的良好回应。大家都期待着使用SuperTextView来显示和处理图片。上一次发布之后,开发者似乎对能够显示网络图片的SuperTextView更感兴趣。
那么,现在,期待已久的SuperTextView又回来了!
要显示网络图片,只需在SuperTextView中添加以下代码:
SuperTextView stv_1 = (SuperTextView) findViewById(R.id.stv_1);
// fill in the picture Url
stv_1.setUrlImage(url);
效果与上图中显示头像的第二个示例相同。
如果你想将网络图片显示为SuperTextView的 StateDrawable ,也可以。
// fill in the picture Url
stv_1.setUrlImage(url, false);
第二个参数为false表示网络图片不会填充整个SuperTextView作为背景,而是作为状态图。当然,关于状态图的一切都会在这里用到。和上面第一个例子一样,整个布局,包括图片、文字、背景都在SuperTextView中处理,从网上下载的图片以StateDrawable 的形式放置在该地方。
SuperTextView为了保持库依赖的纯度和尽可能小的尺寸,没有内置图像加载框架。所以默认情况下会使用内置的简单的图像引擎来下载图片,以保证开发者可以使用显示网络图片的能力。
不过CoorChice还是建议开发者根据项目的不同,选择当前正在使用的图片加载框架,设置为SuperTextView来加载图片。 SuperTextView具有适应任何图像加载框架的能力。下面CoorChice将通过 Glide 和 Picasso 示例向您展示如何将现有图像框架安装到SuperTextView中。
在SuperTextView中,核心的图像加载引擎被抽象为接口Engine ,开发者需要根据所使用的图像帧来实现一个Engine 。
public class GlideEngine implements Engine {
private Context context;
public GlideEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Glide.with(context).load(url).into(new SimpleTarget<GlideDrawable>() {
@Override
public void onResourceReady(GlideDrawable resource, GlideAnimation<? super GlideDrawable> glideAnimation) {
// mainly through the callback return Drawable object to SuperTextView
callback.onCompleted(resource);
}
});
}
}
public class PicassoEngine implements Engine {
private Context context;
public PicassoEngine(Context context) {
this.context = context;
}
@Override
public void load(String url, final ImageEngine.Callback callback) {
Picasso.with(context).load(url).into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// mainly through the callback return Drawable object to SuperTextView
callback.onCompleted(new BitmapDrawable(Resources.getSystem(), bitmap));
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
});
}
}
实现Engine后,下一步是将其安装到SuperTextView中。
CoorChice建议安装在应用程序的onCreate()
中,这样当需要使用SuperTextView加载并显示网络图片时,可以使用三方图片加载框架。
public class STVApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 安装图片引擎
ImageEngine.install(new GlideEngine(this));
// ImageEngine.install(new PicassoEngine(this));
}
}
一行代码,轻松安装。
需要注意的是,任何时候,后安装的Engine实例总是会替换之前安装的Engine实例,即SuperTextView只允许全局存在一个Engine实例。
现在就可以让SuperTextView使用指定的三方图片加载框架来加载图片了。
dependencies {
compile 'com.github.chenBingX:SuperTextView:v3.0.0'
}
一直以来,CoorChice都有一个愿景,期望能够创建这样一个控件:它可以满足你的大部分开发需求,显示文本、图片、几何、动画、状态,让你用一个控件就能高效完成大部分的开发工作。它是如此强大,仿佛有心灵感应,接受你的输入,并按照你的想法呈现出一幅令人惊叹的画面。随着【SuperTextView v2.0】的到来,我们离这个想法又近了一步。现在,就来看看【SuperTextView v2.0】吧!
在【SuperTextView v2.0】中,增加了对图像显示的支持。但这不仅仅是显示图片,还可以根据您的输入智能地将图像裁剪为您想要的形状。
给图片添加圆角,添加边框,或者直接变成圆形。您所需要做的就是设置一些立即可见的简单属性。
如何使用SuperTextView显示图片?
只需将以下两行代码添加到 xml 中即可。
<com.coorchice.library.SuperTextView
...
app:stv_state_drawable="@drawable/avatar1"
app:stv_drawableAsBackground="true"
...
/>
如果你是SuperTextView
的忠实用户,你会发现原来的state_drawable
现在可以用来显示图片了。
现在你的图片就在你的面前,也许你想对其做一些不同的事情,例如添加一个圆角,或者直接变成一个圆形?没问题, SuperTextView
现在完全可以胜任这种工作。
<com.coorchice.library.SuperTextView
android:layout_width="100dp"
android:layout_height="100dp"
...
app:stv_corner="15dp"
app:stv_state_drawable="@drawable/avatar1"
app:stv_drawableAsBackground="true"
...
/>
太简单了!在原来的基础上只需要设置合理的corner
即可。
有时您可能需要使用边框来包裹图片,如上例所示。没错,这绝对是在SuperTextView
能力范围内的。
<com.coorchice.library.SuperTextView
android:layout_width="100dp"
android:layout_height="100dp"
...
app:stv_corner="50dp"
app:stv_stroke_color="#F4E187"
app:stv_stroke_width="4dp"
app:stv_state_drawable="@drawable/avatar1"
app:stv_drawableAsBackground="true"
...
/>
app:stv_stroke_color
控制边框的颜色, app:stv_stroke_width
控制边框的宽度。一切都是那么顺利,智能控制就应该这样吧?
面对复杂的需求变化,【SuperTextView】诞生了第二个drawable来应对这种复杂性。
state_drawable2
。
现在,CoorChice将向您展示上图中的两种效果是如何实现的。
<com.coorchice.library.SuperTextView
android:layout_width="100dp"
android:layout_height="100dp"
...
app:stv_corner="50dp"
app:stv_state_drawable="@drawable/avatar1"
app:stv_drawableAsBackground="true"
// The configuration of state_drawable2 starts here
app:stv_isShowState2="true"
app:stv_state_drawable2="@drawable/recousers"
app:stv_state_drawable2_mode="rightTop"
app:stv_state_drawable2_height="20dp"
app:stv_state_drawable2_width="20dp"
...
/>
<com.coorchice.library.SuperTextView
android:layout_width="100dp"
android:layout_height="100dp"
...
// background
android:background="@drawable/avatar7"
// The configuration of drawable1 starts here
app:stv_isShowState="true"
app:stv_state_drawable="@drawable/triangle"
app:stv_state_drawable_mode="leftTop"
app:stv_state_drawable_width="20dp"
app:stv_state_drawable_height="20dp"
// The configuration of state_drawable2 starts here
app:stv_isShowState2="true"
app:stv_state_drawable2="@drawable/recousers"
app:stv_state_drawable2_mode="rightTop"
app:stv_state_drawable2_height="20dp"
app:stv_state_drawable2_width="20dp"
...
/>
正如你所熟悉的, state_drawable2
延续了第一代的所有流畅操作。在你聪明的运用下,【SuperTextView】一定能大放异彩!
此前, Adjuster
的设计让【SuperTextView】有了灵魂,也让控件变得更加智能。绘图过程的插入、触摸事件的捕获,使得从外部改变控件的状态变得容易。创造力从心开始,从这里开始。
现在,【SuperTextView】最多可以同时携带3个Adjuster
!也许你的创意会更加耀眼。
上面的例子中,CoorChice 将早期的【扫描】和【移动】两个效果添加到了【SuperTextView】中,结果就是你所看到的。
更多的Adjuster
意味着更多的组合和更多的惊喜。在【v1.4.0】中,CoorChice还利用Adjuster
轻松实现按键换色功能。
这是Adjuster
的时代,你可以用它来发挥创意。
setAdjuster(Adjuster)
方法仍然保留,但以后的版本将被删除,您必须尽快迁移。新的替代方案是addAdjuster(Adjuster)
。
app:stv_shaderMode="leftToRight"
的拼写。右边是app:stv_shaderMode="leftTopRight"
。如果您使用了该属性,请升级【SuperTextView v2.0】后更正。set/getPressBgColor()
和set/getPressTextColor()
来控制代码中的背景颜色。 您只需在 xml 文件中设置这些属性,如下所示:
# set the background color when you pressed
app:stv_pressBgColor="@color/red"
# set the text color when you pressed
app:stv_pressTextColor="@color/white"
getCorners()
。你可以在SuperTextView
中获取角点的信息,有时你确实想使用这个方法。 dependencies {
compile 'com.github.chenBingX:SuperTextView:v1.4'
}
mSuperTextView.setFrameRate(30);
// set 30 fps
一触即变,想象无法停止。艺术家,发挥你的创造力!
可以在xml中设置Shader Effect,就可以了。
app:stv_shaderEnable="true"
// set true to begin shader.
app:stv_shaderStartColor="@color/main_blue"
// set shader start color.
app:stv_shaderEndColor="@color/pink"
// set shader end color.
app:stv_shaderMode="rightToLeft"
// set shader mode. These are four mode:
// topTopBottom, bottomToTop, leftToRight, rightToLeft
当然,这些属性可以通过set/get
方法来改变。例如:
mSuperTextView.setShaderStartColor(Color.RED);
现在提供了SuperTextView javadoc,您可以从这里下载(点击index.html
开始): SuperTextView javadoc:http://ogemdlrap.bkt.clouddn.com/SuperTextView%E6%96%87%E6%A1%A3% 20.zip?attname=
如何在build.gradle中使用SuperTextView 1.3:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
compile 'com.github.chenBingX:SuperTextView:v1.3'
}
mSuperTextView.setAdjuster(new MoveEffectAdjuster())
.setAutoAdjust(true)
.startAnim();
SuperTextView属性可以轻松地在XML中设置,并且您可以立即看到效果。就像使用TextView一样。
<SuperTextView
android:layout_width="50dp"
android:layout_height="50dp"
//Set Corner.
//If you want to get a circle, you just need to set the value of half of width.
app:stv_corner="25dp"
//Corner of left-top
app:stv_left_top_corner="true"
//Corner of right-top
app:stv_right_top_corner="true"
//Corner of left-bottom
app:stv_left_bottom_corner="true"
//Corner of right-bottom
app:stv_right_bottom_corner="true"
//Fill color
app:stv_solid="@color/red"
//Stroke color
app:stv_stroke_color="@color/black"
//Stroke width
app:stv_stroke_width="2dp"
//Set a state drawbale
//The default size is half of the SuperTextView.
app:stv_state_drawable="@drawable/emoji"
//The mode of the state drawable. Optional values:
// left、top、right、bottom、center(Default)、
//leftTop、rightTop、leftBottom、rightBottom、
//fill(Fill the SuperTextView. In this case, set state drawable size will not work.)
app:stv_state_drawable_mode="center"
//state drawable height
app:stv_state_drawable_height="30dp"
//state drawable width
app:stv_state_drawable_width="30dp"
//The padding of the left, it base on the value of state_drawable_mode.
app:stv_state_drawable_padding_left="10dp"
//The padding of the top, it base on the value of state_drawable_mode.
app:stv_state_drawable_padding_top="10dp"
//boolean. Whether to show the state drawble.
app:stv_isShowState="true"
//Whether to use the Stroke Text Function.
//Attention, Once you opne this function, setTextColor() will not work.
//That means you must to uses text_fill_color to set text color.
app:stv_text_stroke="true"
// Text stroke color. The default value is Color.BLACK.
app:stv_text_stroke_color="@color/black"
// Stroke text width.
app:stv_text_stroke_width="1dp"
// Stroke text color. The default value is Color.BLACK.
app:stv_text_fill_color="@color/blue"
//boolean. Whether to use the Adjuster Function.
//Use this function to do what you want to do.
//If open this function, but you haven't implemented your Adjuster, the DefaultAdjuster will be used.
//The DefaultAdjuster can auto adjust text size.
app:stv_autoAdjust="true"
/>
所有的属性都可以在java.lang.文件中设置。你也可以得到它们的价值。例如:
mSuperTextView.setCorner(10);
mSuperTextView.getCorner();
通常,你必须编写和管理很多文件才能实现上图的效果。但现在,您可以在 XML 中轻松完成此操作。
与一般的角点不同, SuperTextView可以支持精确控制角点的位置。一、二、三,随心所欲。
使用描边文字就是这么简单!
与一般的状态drawable不同, SuperTextView支持更精确的控制选项。您可以轻松设置状态可绘制,只需使用一个属性。
调整器的目的是在SuperTextView的绘制过程中插入一些选项。它具有非常重要的意义。例如, DefaultAdjuster可以在绘制文本之前自动调整文本大小。当然,您可以用它来做任何事情。
如果要使用调整器,则必须调用SuperTextView.setAutoAdjust(true)
。当然,您可以随时调用SuperTextView.setAutoAdjust(false)
来停止它。您应该小心地调用这些方法。因为,一旦你调用SuperTextView.setAutoAdjust(true)
,但之前没有设置你的调整器,默认调整器将立即被使用。直到你设置自己的调整器。
要实现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。
}
}
注意,如果你启动动画,你必须非常小心地在 adjustmenter() 中编写代码。因为动画将以 60fps/s 的速度绘制。这意味着,该方法将在一秒钟内被调用60次!因此,不要在该方法中创建任何新对象。否则,你的应用程序将会出现很大的延迟!因为它会导致【Memory Thrashing】,GC频繁发生。具体原因可以看我的这两篇文章:
如果您重写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来实现令人难以置信的效果。您需要做的所有事情就是在调整器写入后调用startAnim()
和stopAnim()
来启动或停止动画。
正如你所看到的,这些漂亮的效果是由Adjuster实现的。这种拉式插件设计,使您可以随时在SuperTextView中使用新的Adjuster。您只需要创建一个新的调整器,然后调用setAdjuster()
。
@Alex_Cin
希望看到波纹效果,因此在RippleAdjuster.java
中,我展示了如何使用带有动画驱动的调整器来实现波纹效果。 【RippleAdjuster.java链接:https://github.com/chenBingX/SuperTextView/blob/master/app/src/main/java/com/coorchice/supertextview/SuperTextView/Adjuster/RippleAdjuster.java】
看,你可以实现你的涟漪效应。
调节器贴心地设计了层次功能。您调用Adjuster.setOpportunity(Opportunity opportunity)
来设置SuperTextView中Adjuster 的层次结构。
在SuperTextView中,层次结构从下到上分为:Background Hierarchy、Drawable Hierarchy、Text Hierarchy。您可以使用机会将调整器的层次结构设置为您想要的层。
public enum Opportunity {
BEFORE_DRAWABLE, //between backgournd layer and drawable layer
BEFORE_TEXT, //between drawable layer and text layer
AT_LAST //The top layer
}
机会图。
默认值为Opportunity.BEFORE_TEXT
。就像第二张图一样。
事实上, SuperTextView就像一块画布,你可以在上面绘制你的创意。它让你在创作上发力,你永远不需要写这些无用的代码。
现在您可以开始使用SuperTextView 。
- 如果你喜欢SuperTextView ,谢谢你去Github给我一个star吗? !
- 另外, CoorChice偶尔会在博客平台上分享干货,包括Android相关技术、机器学习、算法、新技术,以及**一些关于个人发展和提升的见解和思考**。到CoorChice的【个人主页】关注我。
- SuperTextViewQQ群: 775951525
Copyright 2017 CoorChice
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.