強大的Selector框架
前言
在开发的过程中,我们经常会遇到给view设置背景,什么圆形背景啊,圆角背景啊,点击变色背景啊之类的,这功能实现起来不难,但是一堆的xml文件啊都大同小异,令人头疼。下面给大家介绍一个selector缓存框架
今天内容涉及以下:
- Selector导入与配置
- Selector初始化
- Selector使用注意事项
- Selector框架的使用
- 项目环节构图及效果图
一. Selector导入与配置
1.1 project的build.gradle中添加配置
在project的build.gradle文件中的allprojects---->repositories 添加如下依赖:
//引入selector框架
maven { url "https://jitpack.io"}
则build.gradle文件代码变为:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
//引入selector框架
maven { url "https://jitpack.io"}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
1.2 app model的build.gradle中添加配置
在app的model中添加库依赖:
//引入selector框架
compile 'com.github.LiangLuDev:DevShapeUtils:1.0.1'
二. Selector初始化
在项目自定义的Application中初始化,如下:
public class AppContext extends Application{
@Override
public void onCreate() {
super.onCreate();
//selector框架初始化
DevShapeUtils.init(this);
}
}
三. Selector使用注意事项
- 项目中minSdkVersion设置为16,不然编译通不过。(Android4.1,现在的手机版本基本都在4.4以上)
- app module的build.gradle中 compileSdkVersion 和 targetSdkVersion 版本一致,并且要在26版本及以上
四. Selector框架的使用
样式设置:
① DevShapeUtils.xxx.into(view)--直接设置到相应的view
② DevShapeUtils.xxx.build()--返回Drawable对象
颜色设置: 所有的颜色设置均可使用 R.color.xxx 或者 #FFFFFF
单位设置: 项目中所有的数值单位为dp
4.1 椭圆
DevShapeUtils.shape(DevShape.OVAL).solid(R.color.colorAccent).into(mBtn1);
4.2 圆形
设置圆形的时候,需要设置按钮为固定大小,且宽高一致,xml中代码如下:
<Button
android:id="@+id/button2"
android:layout_width="50dp"
android:layout_height="50dp"
android:text="圆形"
app:layout_constraintEnd_toStartOf="@+id/button3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button1"
app:layout_constraintTop_toTopOf="@+id/button1" />
设置圆形代码如下:
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).radius(999).into(mBtn2);
4.3 矩形
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).into(mBtn3);
4.4 圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).radius(10).into(mBtn4);
4.5 左上圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).tlRadius(10).into(mBtn5);
由于方法太多,这里用法就不一一展示了,这里介绍下此框架能实现哪些功能:
- 椭圆背景
- 圆形背景
- 矩形背景
- 圆角
- 左上圆角
- 右上圆角
- 左下圆角
- 右下圆角
- 上圆角
- 下圆角
- 斜圆角
- 半圆角
- 实线边框
- 虚线边框
- 线性渐变
- 扫描渐变
- 辐射渐变
- 触摸背景颜色变化
- 触摸背景颜色和字体颜色变化
- 触摸圆角背景和字体颜色变化
在MainActivity中部分使用代码如下:
public class MainActivity extends BaseActivity {
private Button mBtn1;
private Button mBtn2;
private Button mBtn3;
private Button mBtn4;
private Button mBtn5;
private Button mBtn6;
private Button mBtn7;
private Button mBtn8;
private Button mBtn9;
private Button mBtn10;
private Button mBtn11;
private Button mBtn12;
@Override
protected int getContentViewId() {
return R.layout.activity_main;
}
@Override
protected void initView() {
mBtn1=findViewById(R.id.button1);
mBtn2=findViewById(R.id.button2);
mBtn3=findViewById(R.id.button3);
mBtn4=findViewById(R.id.button4);
mBtn5=findViewById(R.id.button5);
mBtn6=findViewById(R.id.button6);
mBtn7=findViewById(R.id.button7);
mBtn8=findViewById(R.id.button8);
mBtn9=findViewById(R.id.button9);
mBtn10=findViewById(R.id.button10);
mBtn11=findViewById(R.id.button11);
mBtn12=findViewById(R.id.button12);
}
@Override
protected void initData() {
//椭圆
DevShapeUtils.shape(DevShape.OVAL).solid(R.color.colorAccent).into(mBtn1);
//圆形
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).radius(999).into(mBtn2);
//矩形
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).into(mBtn3);
//圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).radius(10).into(mBtn4);
//左上圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).tlRadius(10).into(mBtn5);
//右上圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).trRadius(10).into(mBtn6);
//左下圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).blRadius(10).into(mBtn7);
//右下圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).brRadius(10).into(mBtn8);
//上圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).tlRadius(10).trRadius(10).into(mBtn9);
//下圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).blRadius(10).brRadius(10).into(mBtn10);
//斜圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).tlRadius(10).brRadius(10).into(mBtn11);
//斜圆角
DevShapeUtils.shape(DevShape.RECTANGLE).solid(R.color.colorAccent).trRadius(10).blRadius(10).into(mBtn12);
}
@Override
protected void setListener() {
}
@Override
public void onClick(View v) {
}
}
五.项目结构图及效果图
项目结构图:

效果图:

強大的Selector框架
注:本文著作权归作者,由demo大师代发,拒绝转载,转载需要作者授权
強大的Selector框架的更多相关文章
- 大数据计算框架Hadoop, Spark和MPI
转自:https://www.cnblogs.com/reed/p/7730338.html 今天做题,其中一道是 请简要描述一下Hadoop, Spark, MPI三种计算框架的特点以及分别适用于什 ...
- 10大H5前端框架(转)
10大H5前端框架 作为一名做为在前端死缠烂打6年并且懒到不行的攻城士,这几年我还是阅过很多同门从知名到很知名的各种前端框架,本来想拿15-20个框架来分享一下,但在跟几个前辈讨教写文章的技巧时果断被 ...
- Spark 介绍(基于内存计算的大数据并行计算框架)
Spark 介绍(基于内存计算的大数据并行计算框架) Hadoop与Spark 行业广泛使用Hadoop来分析他们的数据集.原因是Hadoop框架基于一个简单的编程模型(MapReduce),它支持 ...
- 不要用Serverzoo 提供的CloudLinux 的五大原因 Linode 強大VPS 資源為你解密
不要用Serverzoo 提供的CloudLinux 的五大原因 Linode 強大VPS 資源為你解密 https://www.williamformosa.com/cloud-linux/
- 6 大主流 Web 框架优缺点对比:15篇前端热文回看
摘自:http://blog.csdn.net/VhWfR2u02Q/article/details/78993079 注:以下文章,点击标题即可阅读 <6 大主流 Web 框架优缺点对比> ...
- 各大开源rpc 框架 比较
各大开源rpc 框架 比较 1. 前言 随着现在互联网行业的发展,越来越多的框架.中间件.容器等开源技术不断地涌现,更好地来服务于业务,解决实现业务的问题.然而面对众多的技术选择,我们要如何甄别出 ...
- Spark(火花)快速、通用的大数据处理引擎框架
一.什么是Spark(火花)? 是一种快速.通用处理大数据分析的框架引擎. 二.Spark的四大特性 1.快速:Spark内存上采用DAG(有向无环图)执行引擎非循环数据流和内存计算支持. 内存上比M ...
- 2020年9大顶级Java框架
诞生于1995年的Java,目前已在134,861个网站上广泛使用,包括ESPN.SnapDeal等.在其24年的成长史中,Java已经证明了自己是用于自定义软件开发的顶级通用编程语言. Java广泛 ...
- 2018年要学习的10大Python Web框架
通过为开发人员提供应用程序开发结构,框架使开发人员的生活更轻松.他们自动执行通用解决方案,缩短开发时间,并允许开发人员更多地关注应用程序逻辑而不是常规元素. 在本文中,我们分享了我们自己的前十大Pyt ...
随机推荐
- linux内核情景分析之exit与Wait
//第一层系统调用 asmlinkage long sys_exit(int error_code) { do_exit((error_code&0xff)<<8); } 其主体是 ...
- 流畅的python第九章笔记 python风格的python
9.1对象表示形式 __repr__和__str__这两个方法都是用于显示的,__str__是面向用户的,而__repr__面向程序员. 我们打印下面的A是默认输出这个对象的类型,我们对B进行了修改_ ...
- jquery导出Excel表格
1.引用js插件 <script src="tableExport.js"></script> <script src="jquery.ba ...
- 中矿大 C 石头剪刀布【决策DP*待看/codeforces原题】
时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K,其他语言65536K64bit IO Format: %lld 题目描述 齐齐和司机正在玩剪刀石头布,不过他俩有些玩腻了,所 ...
- JSON 中的 key
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...
- 微信小程序开发,上传wx.uploadFile 返回参数处理
这真的是个坑,前端看了半天,说是字符串,让后台处理,后台说返回的是正确的,原来这个请求就是返回的string类型,见下图,无法取到code,需要前台自己转化. 以下为百度出来的参考: wx.reque ...
- [BZOJ4568][SCOI2016]幸运数字(倍增LCA,点分治+线性基)
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 2131 Solved: 865[Submit][Statu ...
- Android入门之文件系统操作(一)简单的文件浏览器 (转)
Android入门之文件系统操作(一)简单的文件浏览器 (转) import java.io.File; import java.util.*; import android.app.A ...
- ES6里关于数字的拓展
一.指数运算符 ES6引入的唯一一个JS语法变化是求幂运算符,它是一种将指数应用于基数的数学运算.JS已有的Math.pow()方法可以执行求幂运算,但它也是为数不多的需要通过方法而不是正式的运算符来 ...
- tensorflow seq2seq.py接口实例
以简单英文问答问题为例测试tensorflow1.4 tf.contrib.legacy_seq2seq中seq2seq文件的几个seq2seq接口 github:https://github.com ...