【发布时间】:2013-07-03 20:05:31
【问题描述】:
假设我们有自定义的ListView,它通过在其中绘制一些矩形来扩展onDraw() 方法。
class Listpicker extends ListView {
//..Some other methods here..//
@Override
protected void onDraw(android.graphics.Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(glassPickerBitmap, null, glassRect, semiTransparrentPaint);
}
}
绘制的位图代表某种玻璃,它是矩形,宽度等于列表视图的宽度和一些高度。我想要的是当列表项滚动到此矩形时,用于绘制文本的颜色(并非所有具有背景等的项)将更改为另一种颜色。因此,例如,当列表项适合以便只有一半高度的文本适合 glassPickerBitmap 时,列表项的外部部分应保持其序号颜色,glassPickerBitmap 内部的部分应更改其文本颜色。列表项是没有任何背景的简单 TextView。
如何做到这一点?也许任何ColorFilters 分配给Paint?但是哪里? onDraw() 的 Listview 方法甚至不会在 ListView 滚动时被调用...这可以在自定义视图中完成吗,例如,这将是 ListView 的项目?或者可能是一些Color/Shader/不知道这里还能用什么叠加,但是在哪里?
编辑(添加图片示例):
以下是来自真实应用的一些裁剪示例。有 2 个ListViews:一个在左侧,另一个在右侧。玻璃是灰色的矩形。现在,左侧列表已选择“美国美元” 货币。我以这种方式向右滚动ListView,该选择介于 USD 和 Afghan Afghani 之间。现在,我想要的是左侧ListView 中的 USD 货币将被绘制为红色(现在确切的颜色无关紧要,我稍后会将其更改为有意义的东西)并且,在同时,右侧 ListView 中 "United States Dollar" 的底部和 "Afghan Afghani" 的顶部也将被绘制成相同的红色。
这种颜色更改应该以动态方式进行 - 在列表滚动期间,仅应为玻璃矩形下方的文本部分更改颜色。
*好的,这里的欧元和美元是用非标准青色绘制的特殊货币。问题至少是关于带有 white 颜色的文本。但是,如果也可以更改青色,那就太好了。
【问题讨论】:
-
View.setWillNotDraw(boolean willNotDraw) 应该在ListView中调用onDraw。这是否能让你实现你想要的东西是值得商榷的。然而,有趣的问题。 -
@Prizoff 能否提供两张图片(一张是普通物品,另一张是玻璃下方物品)?
-
@Prizoff 酷,让我看看
-
@Prizoff 你能看看我的回答吗?
-
@EvelioTarazona 我一定会好好研究它,只是不久之后,现在不能做任何编程工具,还有一些其他与 IT 无关的问题。乍一看,它应该可以工作,谢谢!
标签: java android listview colors overlay