【View学习】BackgroundLibrary第三方库学习,节省shape、selector创建时间

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@TOC


前言

安卓在实现多种多样的功能时,一个View的显示功能时不可或缺的,而我们常常耗费大量时间在创建shape、selector上,不妨来学习一下这个开源库BackgroundLibrary,让我们的开发事半功倍。

当然最好的学习教程还是github作者提供的wiki和代码

一、BackgroundLibrary能做到什么?

BackgroundLibrary是一个快速开发开源库,它可以帮助我们轻松实现一些常见的属性设置,如圆角、描边和选择器等。使用BackgroundLibrary可以省去手动创建shape和selector的麻烦,从而节省我们的时间和精力

二、使用步骤

1.依赖方式

  1. gradle依赖(但是改导入方法可能找不到部分View)
gradle 复制代码
 repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
implementation 'com.github.JavaNoober.BackgroundLibrary:library:1.7.6'
  1. 模块导入 2.1 先从作者提供的代码拷贝模块libraryx搬迁到自己的项目里 2.2 然后在app模块的gradle添加这句
gradle 复制代码
dependencies {
    implementation project(':libraryx')
}

2.xml使用

xml 复制代码
    <com.noober.background.view.BLButton
        android:id="@+id/btn_login"
        style="?android:attr/borderlessButtonStyle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="登录"
        app:bl_corners_radius="20dp"
        app:bl_gradient_startColor="#E689E6"
        app:bl_gradient_centerColor="#4F94CD"
        app:bl_gradient_endColor="#ad2233"
        android:layout_marginHorizontal="100dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"/>

xml通过属性自动生成圆角和渐变色,无需创建shape

3.代码实时设置

kotlin 复制代码
        val btn_register = findViewById<Button>(R.id.btn_register)
        val build = DrawableCreator.Builder().setCornersRadius(dip2px(20))
            .setGradientColor(Color.parseColor("#E689E6"),Color.parseColor("#4F94CD"), Color.parseColor("#ad2233")).build()
        btn_register.background = build

4.部分常用属性,对应属性都有set()方法

  1. shape属性

| 属性 | 描述 |
|----------------------------------------------|-------------------------------------------------------|--------|--------|
| bl_shape | rectangle、oval、line、ring(暂时不支持) |
| bl_shape_alpha | drawable透明度,取值范围0-1 |
| bl_corners_radius | 圆角 |
| bl_gradient_startColor(centerColor、endColor) | 渐变色(始、中、终) |
| bl_text_gradient_orientation | 文字渐变方向(vertical、horizontal) |
| bl_stroke_width | 描边宽度 |
| bl_stroke_color | 描边颜色 |
| bl_shape_alpha | drawable透明度,取值范围0-1 |
| bl_corners_radius | 圆角 |
| bl_stroke_dashGap | 描边宽度,0时为实线 |
| bl_stroke_dashWidth | 描边虚线的间隔 |
| bl_stroke_position | 指定显示边框位置(left | bottom | right) |
| bl_position | left、right、top、bottom 设置drawable位于view的指定位置。一般用于图标带文字 |

  1. selector属性
属性 描述
bl_checkable_drawable(bl_unCheckable_drawable)
bl_checked_drawable(bl_unChecked_drawable) 点击后改变,适用于不带图标的RadioButton
bl_enabled_drawable(bl_unEnabled_drawable) --
bl_selected_drawable(bl_unSelected_drawable) 点击后变化,再点击恢复原样(适用于button),搭配属性(bl_selected_textColor)
bl_pressed_drawable(bl_unPressed_drawable) 触击时变化,松开恢复原样(适用于button、textView)
bl_focused_drawable(bl_unFocused_drawable) --
bl_focused_hovered(bl_unFocused_hovered)
bl_focused_activated(bl_unFocused_activated)
bl_checked_button_drawable(bl_unChecked_button_drawable) 点击后改变,适用于带图标的RadioButton、checkbox
  1. 其他属性
属性 描述
bl_ripple_enable 是否开启点击的水波纹效果,只支持sdk21以上版本
bl_ripple_color 水波纹颜色(如果开启,一定要有这个属性能生效,只支持sdk21以上版本)
bl_checkable_stroke_color 边框状态的属性。如果在版本1.6.1之前,sdk21以下,会没有效果,默认固定边框色取stroke_color的值,1.6.1开始,可以生效
bl_checked_stroke_color
....
  1. 属性结合
属性 描述
bl_multi_selector1 默认为true,加上-为false,以", "为分隔符,最后一项为资源id的名字。可选属性(state_checkable、state_checked、state_enabled、state_selectedstate_pressed、state_focused、state_hovered、state_activated)

因为属实有太多属性,我强烈建议去作者提供的wiki查看所有属性

5.增加xml中的属性代码提示

只需要去改路径下添加BackgroundLibrary.xml即可 C:\Users\用户名\AppData\Roaming\Google\AndroidStudio2021.3\templates 在文章顶部可以看到改文件,下载使用即可。如果没有也可以去作者wiki里下载。

总结

该库的使用其实不难,但是我个人只在实习的公司使用过,没有经常使用,所以是否会与其他属性冲突,或者有其他bug还不可知,但是其他的圆角,和描边、填充等基础属性是没问题的,公司中的项目已经用上该三方库了。 至于以后遇到什么问题或者还有补充的地方我会再回来补充。

现在有个疑惑就是,预览没有效果,就是按照作者提供的方法自定义View也没有效果,如果有同学知道的,还请在评论区指导我操作一下。 因为公司代码是可以预览的,我确信库是没问题的,就是我操作有问题。

相关推荐
吾日三省吾码2 小时前
JVM 性能调优
java
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi
温辉_xh2 小时前
uiautomator案例
android
弗拉唐3 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi773 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
工业甲酰苯胺4 小时前
MySQL 主从复制之多线程复制
android·mysql·adb
少说多做3434 小时前
Android 不同情况下使用 runOnUiThread
android·java
知兀4 小时前
Java的方法、基本和引用数据类型
java·笔记·黑马程序员
蓝黑20204 小时前
IntelliJ IDEA常用快捷键
java·ide·intellij-idea