BackgroundLibrary 通过标签直接生成shape,无需再写shape.xml

齐文栋
2023-12-01

BackgroundLibrary
A framework for directly generating shape through Tags, no need to write shape.xml again(通过标签直接生成shape,无需再写shape.xml)

English.md

依赖方式:

implementation “com.android.support:appcompat-v7:$supportVersion”
implementation ‘com.noober.background:core:1.5.8’
如果项目使用了androidx:

implementation “androidx.appcompat:appcompat:$supportVersion”
implementation ‘com.noober.background:core:1.5.8’
使用文档
无需任何代码,直接加入bl标签属性即可,与原生view无缝衔接,具体使用方法以及属性内容请查看wiki
重要的事情说3遍!!!
wiki
wiki
wiki

示例效果

使用效果完全和原生shape selector一样,但是只需要直接在xml中加入属性即可,例如

<TextView
    android:id="@+id/ttt"
    android:layout_width="130dp"
    android:layout_height="36dp"
    android:layout_marginTop="5dp"
    android:gravity="center"
    android:text="TextView"
    android:textColor="#8c6822"
    android:textSize="20sp"
    app:bl_corners_radius="4dp"
    app:bl_solid_color="#E3B666"
    app:bl_stroke_color="#8c6822"
    app:bl_stroke_dashGap="5dp"
    app:bl_stroke_dashWidth="10dp"
    app:bl_stroke_width="2dp" />

1、边框+背景+圆角


等同于

2、渐变 等同于


3、点击效果

第一个点赞效果:

android:layout_width=“20dp”
android:layout_height=“20dp”
android:layout_marginTop=“5dp”
app:bl_pressed_drawable="@drawable/circle_like_pressed"
app:bl_unPressed_drawable="@drawable/circle_like_normal" />
就等同于:

通过代码设置:

Drawable drawable4 = new DrawableCreator.Builder().setCornersRadius(dip2px(20))
.setPressedDrawable(ContextCompat.getDrawable(this, R.drawable.circle_like_pressed))
.setUnPressedDrawable(ContextCompat.getDrawable(this, R.drawable.circle_like_normal))
.build();
tv.setClickable(true);
tv.setBackground(drawable4);
第二个按钮效果:


通过代码设置:

Drawable drawable3 = new DrawableCreator.Builder().setCornersRadius(dip2px(20))
.setRipple(true, Color.parseColor("#71C671"))
.setSolidColor(Color.parseColor("#7CFC00"))
.setStrokeColor(Color.parseColor("#8c6822"))
.setStrokeWidth(dip2px(2))
.build();
btn.setBackground(drawable3);
使用其实基本和selector shape一样。

4、点击文字变色


5、点击填充边框变色属性


6、style类似的使用方式

style中不要加入"app:", 直接写属性名即可


7、设置drawableLeft

<Button
    android:id="@+id/btn_like"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    app:bl_position="left"
    android:background="@null"
    android:text="点赞+1"
    app:bl_pressed_drawable="@drawable/circle_like_pressed"
    app:bl_unPressed_drawable="@drawable/circle_like_normal" />

<Button
    android:id="@+id/btn_like2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    app:bl_position="left"
    android:background="@null"
    android:text="未点赞"
    app:bl_selected_textColor="#fbdc4a"
    app:bl_unSelected_textColor="@android:color/black"
    app:bl_selected_drawable="@drawable/circle_like_pressed"
    app:bl_unSelected_drawable="@drawable/circle_like_normal" />

8、设置帧动画

<View
    android:id="@+id/v_anim"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:bl_oneshot="false"
    app:bl_duration="50"
    app:bl_anim_auto_start="true"
    app:bl_frame_drawable_item0="@drawable/img00"
    app:bl_frame_drawable_item1="@drawable/img01"
    app:bl_frame_drawable_item2="@drawable/img02"
    app:bl_frame_drawable_item3="@drawable/img03"
    app:bl_frame_drawable_item4="@drawable/img04"
    app:bl_frame_drawable_item5="@drawable/img05"
    app:bl_frame_drawable_item6="@drawable/img06"
    app:bl_frame_drawable_item7="@drawable/img07"
    app:bl_frame_drawable_item8="@drawable/img08"
    app:bl_frame_drawable_item9="@drawable/img09"
    app:bl_frame_drawable_item10="@drawable/img10"
    app:bl_frame_drawable_item11="@drawable/img11"
    app:bl_frame_drawable_item12="@drawable/img12"
    app:bl_frame_drawable_item13="@drawable/img13"
    app:bl_frame_drawable_item14="@drawable/img14"/>

9、甚至支持直接在xml中设置方法,暂时只支持无参方法,支持父类方法

<Button
    android:id="@+id/btn"
    android:layout_width="320dp"
    android:layout_height="36dp"
    android:text="通过bl_function属性跳转到列表"
    app:bl_function="finish"/>

加入bl_function属性即可,这样控件就增加了finish点击事件,很多时候返回键只是一个finish,我们仅需要加入该属性即可, 当然使用场景还有很多。

 类似资料: