说明
该库可以轻松的地完成 圆角、边框、状态、阴影 背景效果绘制。
该库可以通过layout布局文件来设置背景属性(根据设置属性创建合适的drawable并设置到view的background);或者通过java代码创建drawable;也可以定义一些主题样式style来应用于不同的和通用的view。
GIT地址: github.com/yangbo001/a…
截图
使用
Step 1
- Add repositories in your project build.gradle file.
buildscript {
repositories {
...
maven { url "https://jitpack.io" }
}
}
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
- Add dependency
dependencies {
...
implementation 'com.github.yangbo001:android-multibackground:1.0.6'
}
Step 2
set corner
<support.background.extension.*View
...
app:background_corner_radius="4dp" />
<support.background.extension.*View
...
android:background="@mipmap/background" <!--the default background-->
app:background_corner_radius_tl="4dp" <!--top-left-->
app:background_corner_radius_tr="4dp" <!--top-right-->
app:background_corner_radius_bl="4dp" <!--bottom-left-->
app:background_corner_radius_br="4dp"/> <!--bottom-right-->
Drawable drawable = new BackgroundBuilder()
.setBackground(Color.WHITE)
.setCornerRadius(4)
// .setCornerRadii(4, 4, 4, 4)
.buildDrawable();
set stroke
<support.background.extension.*View
...
android:background="@mipmap/background" <!--the default background-->
app:background_stroke_color="@color/colorAccent" <!--stroke color-->
app:background_stroke_width="2dp" <!--stroke width-->
app:background_stroke_pressed="@color/colorPrimary" <!--stroke pressed color-->
app:background_stroke_checked="@color/colorPrimaryDark" <!--stroke checked color-->
app:background_stroke_disable="@color/light_gray"/> <!--stroke disabled color-->
<support.background.extension.*View
...
app:background_stroke_dash_width="4dp" <!--if dash_width large than zero, the stroke style is dashed-->
app:background_stroke_dash_gap="4dp"/> <!--the gap between dashed-->
Drawable drawable = new BackgroundBuilder()
.setBackground(getResources().getDrawable(R.mipmap.background)) <!--set background-->
.setStroke(2, Color.BLUE) <!--stroke: width,color-->
// .setStroke(2, Color.BLUE, 4, 4) <!--stroke: width,color; dashed:width,gap-->
// .setStroke(2, Color.BLACK, Color.GREEN, Color.BLUE, Color.GRAY) <!--stroke: width,color; pressed-color,checked-color,disable-color-->
// .setStroke(2, Color.BLACK, Color.GREEN, Color.BLUE, Color.GRAY, 4, 4) <!--stroke: width,color; pressed-color,checked-color,disable-color;dashed:width,gap-->
// .buildDrawable();
set shadow
<support.background.extension.*View
...
android:background="@mipmap/background" <!--the default background-->
app:background_shadow_color="@color/gray" <!--shadow color-->
app:background_shadow_radius="2dp" <!--shadow radius-->
app:background_shadow_offset_x="2dp" <!--shadow offset of x-axs-->
app:background_shadow_offset_y="-2dp"/> <!--shadow offset of y-axs-->
Drawable drawable = new BackgroundBuilder()
.setBackground(getResources().getDrawable(R.mipmap.background))
.setTargetView(targetView) // must set the target view to reset the view padding to fit the shadow region
.setShadow(Color.GRAY, 6, 6, -6)
.buildDrawable();
set background state
explain:the pressed background is mutually exclusive with pressed ripple animation
<support.background.extension.*View
...
android:background="@mipmap/background" <!--the default background-->
app:background_state_pressed="@mipmap/background" <!--the pressed background-->
app:background_state_checked="@color/colorPrimary" <!--the checked background-->
app:background_state_disable="@mipmap/background_gray"/> <!--the view disabled background-->
Drawable drawable = new BackgroundBuilder()
.setBackground(Color.RED)
.setBackgroundPressed(Color.BLUE)
// .setBackgroundPressed(getResources().getDrawable(R.mipmap.background))
// .setBackgroundPressedRippleColor(Color.GREEN)
.setBackgroundChecked(Color.GREEN)
// .setBackgroundPressed(getResources().getDrawable(R.mipmap.background))
.setBackgroundDisable(Color.GRAY)
// .setBackgroundDisable(getResources().getDrawable(R.mipmap.background))
.buildDrawable();
special for text view
explain:if the view is child of TextView, you can set the attr for compound like compound drawable size and drawable align to text; and the text color state
<support.background.extension.*TextView
...
android:textColor="@color/black" <!--the default text color-->
app:text_pressed_color="@color/green" <!--the pressed text color-->
app:text_checked_color="@color/blue" <!--the checked text color-->
app:text_disable_color="@color/gray" <!--the view disabled text color-->
app:compound_drawable_width="20dp" <!--compound drawable width-->
app:compound_drawable_height="20dp" <!--compound drawable height-->
app:compound_drawable_align_to_text="true"/> <!--compound drawable align to text-->
theme style
<resources>
<style name="ButtonBlue">
<item name="android:textColor">@android:color/white</item>
<item name="text_pressed_color">@android:color/black</item>
<item name="android:background">@android:color/holo_blue_light</item>
<item name="background_state_pressed_ripple">@android:color/darker_gray</item>
</style>
<style name="ButtonBlue.Round_4dp">
<item name="background_corner_radius">4dp</item>
</style>
<style name="ButtonBlue.Round_4dp.StrokeDarkBlue">
<item name="background_stroke_width">1dp</item>
<item name="background_stroke_color">@android:color/holo_blue_dark</item>
<item name="background_stroke_pressed">@android:color/darker_gray</item>
</style>
</resources>
<support.background.extension.ExtendButton
android:layout_width="match_parent"
android:layout_height="50dp"
style="@style/ButtonBlue.Round_4dp.StrokeDarkBlue"/>
附加
extendView只实现了android普通视图,如果您想对自定义View使用layout参数布局,只需扩展自定义view并向构造函数添加以下行
public ExtendFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
// the key codes
setBackground(new BackgroundBuilder().attributeFromView(this, attrs).buildDrawable());
}