【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也没有效果,如果有同学知道的,还请在评论区指导我操作一下。 因为公司代码是可以预览的,我确信库是没问题的,就是我操作有问题。

相关推荐
从琳开始98927 分钟前
网络原理入门(二)------OSI七层模型?TCP/IP五层(四层)模型原来是这样的
java·网络·tcp/ip·java-ee·php
文丑颜不良啊39 分钟前
LeetCode1861~1880题目解析
java·leetcode
Flynn Liang41 分钟前
AgentScope Java 深度解析:ReActAgent、HarnessAgent 与多智能体编排——JVM 上的自治 Agent 底座
java·大模型·架构设计·ai agent·spring ai·langchain4j·agentscope
Flynn Liang1 小时前
上线后怎么排查 AI 调用?Spring AI Observability:token/延迟/成本埋点与全链路追踪
java·人工智能·spring·监控·可观测性·observability·springai
文丑颜不良啊1 小时前
LeetCode1921~1940题目解析
java·leetcode
Tt有了t1 小时前
设计模式速查
java·python·设计模式
Thomas.Sir1 小时前
第15课:SpringBoot连接池详解:HikariCP配置、调优、监控,4.x连接池新特性
java·spring boot
海雅达手持终端PDA2 小时前
巡线、深井、爆管抢修与极寒水网的硬件矩阵怎么配?海雅达水务巡检终端PDA选型指南
android·物联网·5g·集成测试·能源·政务
VimorphTech2 小时前
每批开 4 个线程,为什么限制不住 TTS 的总并发?
java·spring boot·spring
Pniubi2 小时前
Java为什么要分堆和栈
java·开发语言