【发布时间】:2010-12-03 16:58:55
【问题描述】:
我正在尝试调试我在使用 ExpandableListAdapter.getChildView 时遇到的问题。
我已经定义了一个 Drawable,它的形状包含一个渐变和一个半径为 1 的角作为列表项的背景 - 没什么特别的。
然后,在我的适配器代码中,我在 getChildView 中有这个 sn-p:
GradientDrawable background = (GradientDrawable) convertView.getBackground();
float topRadius = 0;
float bottomRadius = 0;
// Make the corner radius obvious for debugging
if (childPosition == 0)
topRadius = 14;
if (childPosition == (mValues.size() - 1))
bottomRadius = 14;
background.setCornerRadii(new float [] { topRadius, topRadius,
topRadius, topRadius,
bottomRadius, bottomRadius,
bottomRadius, bottomRadius});
convertView.setBackgroundDrawable(background);
这里的尝试是舍入第一个列表项的顶部和最后一个列表项的底部。通过调试,我似乎正在为我想要的项目设置我想要的值。
但是,我遇到的问题是为所有列表项设置角半径,就好像它是底部项一样。
顺便说一句,有没有办法获得 GradientDrawable 的圆角半径,至少用于调试目的?
谢谢,
wTs
【问题讨论】:
-
不确定这是否与您相关,只是想指出半径存在一个已知错误,对于您不想圆角的角,应始终使用 0.1f 而不是 0。见code.google.com/p/android/issues/detail?id=939 - 但我认为你的方式是相反的,所以它可能与列表适配器逻辑有关。
-
看grepcode.com/file/repository.grepcode.com/java/ext/…,我认为不可能获得角半径。您是否尝试过在 xml 中定义可绘制对象 - 只是为了看看它是否有所作为?
-
@Mathias:基本的drawable在xml中,但我需要修改第一项和最后一项(仅)。
-
@WtS:我的意思是使用三个可绘制对象(顶部、中间、底部)并将逻辑放在适配器的 getView/bindView 中。但我看到你已经得到了一个解决方案,来自 Romain 的有趣链接,需要自己通读一遍......干杯。
标签: android expandablelistadapter cornerradius