经常有这样的需求,你的功能图标要像一个个物品,摆放在书架上,像这样:
我的思路比较简单,重载GridView,在他绘制子视图前,先把背景绘制完成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
public class RowGridView extends GridView {
private Bitmap rowBackground;
private int rowBgHeight;
private int columnNum;
public RowGridView(Context context, AttributeSet attrs){
super (context,attrs);
//获得列数
columnNum = attrs.getAttributeIntValue(NAMESPACE_ANDROID, "numColumns" , 3 );
//获取自定义属性
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.row_bg_grid_view);
rowBgHeight = a.getDimensionPixelSize(R.styleable.row_bg_grid_view_row_bg_height, 50 );
int row_bg_resource = a.getResourceId(R.styleable.row_bg_grid_view_row_background,- 1 );
rowBackground = BitmapFactory.decodeResource(getResources(),row_bg_resource);
}
@Override
protected void dispatchDraw(Canvas canvas){
//行高
int rHeight = getChildAt( 0 ).getHeight();
int width = getWidth();
int rowNum = ( int )Math.ceil(getChildCount()/( double )columnNum);
//源绘制矩形
Rect src = new Rect( 0 , 0 ,rowBackground.getWidth(),rowBackground.getHeight());
for ( int i= 0 ,y=rHeight-(rowBgHeight/ 2 ); i<rowNum; i++,y += rHeight){
//目的绘制矩形
Rect dst = new Rect( 0 ,y,width,y+rowBgHeight);
canvas.drawBitmap(rowBackground,src,dst, null );
}
super .dispatchDraw(canvas);
}
} |
上面第11行有这样一句
1
|
columnNum = attrs.getAttributeIntValue(NAMESPACE_ANDROID, "numColumns" , 3 );
|
为什么不用getNumColumns?因为这个函数需要api level 11(即Android 3.0以上),而且有可能返回-1
两个自定义属性:背景和背景高度,在values/attrs.xml定义如下
1
2
3
4
5
6
7
|
<? xml version = "1.0" encoding = "utf-8" ?>
< resources >
< declare-styleable name = "row_bg_grid_view" >
< attr name = "row_background" format = "reference" />
< attr name = "row_bg_height" format = "dimension" />
</ declare-styleable >
</ resources >
|
最后使用的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< LinearLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
android:orientation = "vertical" >
< com.best.oa.common.base.RowGridView
android:id = "@+id/functions"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content"
android:layout_marginTop = "20dip"
android:layout_weight = "1"
android:numColumns = "2"
oa:row_background = "@drawable/grid_row_bg"
oa:row_bg_height = "60dip"
android:stretchMode = "columnWidth" >
</ com.best.oa.common.base.RowGridView >
</ LinearLayout >
|
为Android GridView 设置行背景的更多相关文章
-
Android GridView设置行数
普通的做法是设置一个高度,然后里面能显示出来几行就是几行,如果里面的内容高度变了,就需要重新调整高度来适配. 观察了一下它的onMeasure @Override protected void onM ...
-
雷林鹏分享:jQuery EasyUI 数据网格 - 条件设置行背景颜色
jQuery EasyUI 数据网格 - 条件设置行背景颜色 本教程将向您展示如何根据一些条件改变数据网格(datagrid)组件的行样式.当 listprice 值大于 50 时,我们将为该行设置不 ...
-
Android Studio设置图片背景及主题设置
因为Android Studio是基于IDEA的,所以IDEA里面能用的插件Android Studio也能用,这次图片背景是依赖IDEA下的一个插件,名为BackgroundImage的插件,用户可 ...
-
Android Studio设置行宽、格式化断行
设置基于Android studio 1.2,其它版本可能位置不大一样,可以直接搜索 1.设置行宽 就是那条右标准线的位置:Setting-->Editor-->Code Style,右侧 ...
-
Android GridView 指定行数,动态行宽,占满空间
有时间我们需要 使用GridViw 让它占满父控件,例: 特别是在适配的时间比较麻烦,在不同的机型上可能分出下,下面空的太多,或有滚动条问题,; 下面说一下实现思路: 首先,设置GridView 为三 ...
-
EasyUI 条件设置行背景颜色
数据网格(datagrid)的 rowStyler 函数的设计目的是允许您自定义行样式. rowStyler 函数需要两个参数: rowIndex:行的索引,从 0 开始. rowData:该行相应的 ...
-
Android 代码设置Activity 背景透明
当指定Activity 样式 Them.Dialog 时候 又不同意用XML 设置 Activity 的背景颜色的时候 用代码 this.getWindow().getDecorView().setB ...
-
jQuery EasyUI 数据网格 - 条件设置行背景颜色
$('#tt').datagrid({ rowStyler:function(index,row){ if (row.listprice>50){ return 'color:blue;font ...
-
Android 网络url设置View背景图
imgstr为url网络图片地址,topllay是要设置背景的控件: 方法1.Android Glide设置View背景图 Glide.with(this).load(imgStr).asBitmap ...
随机推荐
-
自定义View(5)Paint常用的一些绘制滤镜,特效等介绍
Shader 返回绘图过程中重复色块的基类 相关方法:Paint::setShader(Shader shader) BitmapShader 从位图加载重复色块 LinearGradient, Ra ...
-
4.3 spring-嵌入式beans标签的解析
对于嵌入式的beans标签,想信大家很少使用过,或者接触过,起码,我本人就没用过. 它非常类似于Import标签所提供的功能; 使用如下: <?xml version="1.0&quo ...
-
php做站点购物车 你搞懂了吗?
网上购物现已成为时尚,客户选择一个商品将其放入到购物车,然后返回继续购物或者去收银台,这个功能怎样实现呢?今天capucivar就将使用PHP来实现这个购物车的功能. 首先,做一个简单的首页,从数据库 ...
-
Chome——扩展程序,获取更多扩展程序报错
修改/替换hosts文件 地址:c:/windows/system32/drivers/etc hosts:可从网上搜索下载或网盘下载(链接: http://pan.baidu.com/s/1bpu6 ...
-
引入Log4j
1. pom文件添加依赖 <!-- log start --> <dependency> <groupId>log4j</groupId> <ar ...
-
系统的讲解 - SSO单点登录
目录 概念 好处 技术实现 小结 扩展 概念 SSO 英文全称 Single Sign On,单点登录. 在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统. 比如:淘宝网(www.t ...
-
老男孩Python全栈学习 S9 日常作业 013
1.写一个求正方形周长和面积的类 class perimeter: def __init__(s,long): s.long = long def Perimeter(s): print((s.lon ...
-
Java中的公平锁和非公平锁实现详解
前言 Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue.CopyOnWriteArrayList.LinkedBlockingQueue,它们线程安全的实现方式并非 ...
-
boost asio 学习(九) boost::asio 网络封装
http://www.gamedev.net/blog/950/entry-2249317-a-guide-to-getting- started-with-boostasio?pg=10 9. A ...
-
ORM--Entity Framework 学习(01)
关键词:Entity Framework:微软官方提供的ORM工具,ORM让开发人员节省数据库访问的代码时间,将更多的时间放到业务逻辑层代码上.EF提供变更跟踪.唯一性约束.惰性加载.查询事物等.开发 ...