文档章节

代码实现控件的背景选择器和边框形状

qihulingdeyu
 qihulingdeyu
发布于 2015/05/21 16:05
字数 397
阅读 25
收藏 0

代码如下:

import android.content.Context;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.graphics.Paint;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.StateListDrawable;
import android.graphics.drawable.shapes.RoundRectShape;

public class DrawableUtils {

	public static Drawable colorDrawable(int color){
		if(color!=0){
			return new ColorDrawable(color);
		}
		return null;
	}
	
	public static ColorStateList colorStateList(int ncolor, int pcolor){
		if(ncolor!=-1 && pcolor!=-1){
			int[][] states = new int[2][];
			states[0] = new int[]{android.R.attr.state_checked};
			states[1] = new int[]{android.R.attr.state_enabled};
			
			int[] colors = {pcolor, ncolor};
			ColorStateList list = new ColorStateList(states, colors);
			return list;
		}
		return null;
	}
	
	public static ShapeDrawable shapeDrawable(int color, int radius){
		float[] outerR = new float[]{radius, radius, radius, radius, radius, radius, radius, radius };
		// 构造一个圆角矩形,可以使用其他形状,这样ShapeDrawable 就会根据形状来绘制。
		RoundRectShape roundRectShape = new RoundRectShape(outerR, null, null);
		// 如果要构造直角矩形可以
		//RectShape rectShape = new RectShape();
		// 组合圆角矩形和ShapeDrawable
		ShapeDrawable shapeDrawable = new ShapeDrawable(roundRectShape);
		// 设置形状的颜色
		shapeDrawable.getPaint().setColor(color);
		// 设置绘制方式为填充
		shapeDrawable.getPaint().setStyle(Paint.Style.FILL);   
		return shapeDrawable;
	}
	
	public static ShapeDrawable borderDrawable(int color, int radius, int borderWidth){
		float[] outerR = new float[]{radius, radius, radius, radius, radius, radius, radius, radius };
		RoundRectShape roundRectShape = new RoundRectShape(outerR, null, null);
		ShapeDrawable shapeDrawable = new ShapeDrawable(roundRectShape);
		shapeDrawable.getPaint().setColor(color);
		shapeDrawable.getPaint().setStrokeWidth(borderWidth);
		shapeDrawable.getPaint().setStyle(Paint.Style.STROKE);
		return shapeDrawable;
	}
	
	public static Drawable checkedSelector(int ncolor, int pcolor){
		if(ncolor!=-1 && pcolor!=-1){
			StateListDrawable selector  = new StateListDrawable();
			selector.addState(new int[]{android.R.attr.state_checked}, new ColorDrawable(pcolor));
			selector.addState(new int[]{android.R.attr.state_enabled}, new ColorDrawable(ncolor));
			return selector;
		}
		return null;
	}
	
	public static Drawable checkedSelector(Context context, int nid, int cid){
		if(nid!=-1 && cid!=-1){
			Resources res = context.getResources();
			StateListDrawable selector  = new StateListDrawable();
			selector.addState(new int[]{android.R.attr.state_checked}, res.getDrawable(cid));
			selector.addState(new int[]{android.R.attr.state_enabled}, res.getDrawable(nid));
			return selector;
		}
		return null;
	}
	
	public static Drawable pressedSelector(int ncolor, int pcolor){
		if(ncolor!=-1 && pcolor!=-1){
			StateListDrawable selector  = new StateListDrawable();
			selector.addState(new int[]{android.R.attr.state_pressed}, new ColorDrawable(pcolor));
			selector.addState(new int[]{android.R.attr.state_enabled}, new ColorDrawable(ncolor));
			return selector;
		}
		return null;
	}
	
	public static Drawable pressedSelector(Context context, int nid, int pid){
		if(nid!=-1 && pid!=-1){
			Resources res = context.getResources();
			StateListDrawable selector  = new StateListDrawable();
			selector.addState(new int[]{android.R.attr.state_pressed}, res.getDrawable(pid));
			selector.addState(new int[]{android.R.attr.state_enabled}, res.getDrawable(nid));
			return selector;
		}
		return null;
	}

}


© 著作权归作者所有

qihulingdeyu
粉丝 0
博文 4
码字总数 610
作品 0
广州
程序员
私信 提问
QSS知识总结

QT样式表单 QT的样式表单允许我们在对程序不做任何代码上的更改的情况下轻松改变应用程序的外观。 其思想来源于网页设计中的CSS,即可以将功能设计和美学设计分开。 它的语法和概念和HTML CS...

tiankefeng0520
2014/05/27
0
0
Windows Phone Button控件样式自定义

概述 Button是各种手机平台中最重要的控件之一,我们与系统的大部分交互都会通过按钮进行,在Android和iOS中都提供了很方便的按钮自定义方式,Android可以采用selector背景选择器进行按钮状态...

dodola
2013/03/10
0
0
【更新】Essential Studio for Xamarin更新至2018 v4(一)

下载Essential Studio for Xamarin最新版本 Essential Studio for Xamarin是全面的Xamarin.iOS、Xamarin.Android和Xamarin.Forms组件套包,包含最快的图表和网格。 COMMON 主题支持 现在,您...

电池盒
01/04
0
0
Android开发偷懒技巧之XSelector

平时我们在开发项目时看到设计稿中有各种对控件设置在不同状态下显示不同的背景(边框、颜色等)样式或者不同的文字显示颜色等效果,这时候我们就需要在项目的resource目录下的drawable中创建...

u012532559
2018/05/05
0
0
第三部分 web前端之CSS

CSS指层叠样式表 ,控制如何显示HTML元素 为什么要用css控制样式?而不直接用属性呢? 同样是设置文本的颜色,元素用的是text属性,元素用的是color属性,而元素根本就没有用于单独设置字体颜...

孙浩j
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

软件项目开发流程——看这篇文章就够了

项目开发流程 1.可行性分析 干什么?有没有市场;谁来做?市场部+销售部,出可行性报告。 2.需求分析 需求分析师(懂技术+懂业务)【挖掘客户真正的需求】,需求分析报告(白皮书) 3.设计阶...

须臾之余
26分钟前
2
0
jenkins多个slave遇到的坑

jenkins配置如下: 在Jenkins上添加了两个节点(Slave Node),且为这两个节点设置了一个相同的标签"windows"。创建了一个新Job – "test-windows",选择的是”构建一个自由风格的软件项目”。...

shzwork
29分钟前
1
0
stimulsoft入门教程:分层报表(上)

下载Stimulsoft Reports.Ultimate最新版本 Stimulsoft专题页:全面汇集Stimulsoft视频教程、版本更新、使用教程、应用案例和相关开发资源等。 执行以下步骤以创建分层报表: 运行设计器 连接...

xiaochuachua
36分钟前
1
0
好程序员大数据教学点睛:Hadoop基础篇

  好程序员大数据教学点睛:Hadoop基础篇,Hadoop包含两个部分: 1.Hadoop Distributed File System (Hadoop分布式文件系统) HDFS具有高容错性,并且可以被部署在低价的硬件设备之上。HDF...

好程序员IT
36分钟前
1
0
京东网络开放之路——自研交换机探索与实践

相比传统商业交换机,白盒交换机具有更好的开放性和灵活性,解决了运维管理方面的诸多痛点,随着SONiC的不断完善和白盒交换机市场的成熟,京东基于SONiC研发了自己的白盒交换机,更加适合京东...

京东云技术新知
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部