我正在尝试在GridView中获取ImageView的颜色,我之前已经应用了颜色过滤器。我正在运行带有4.2.2的Nexus 4
我正在改变像这样的ImageView的颜色。在应用过滤器之前,图像的实际颜色是白色。
Drawable myIcon = getResources().getDrawable(R.drawable.bufferbuildercolor3);
myIcon.setColorFilter(new PorterDuffColorFilter(Color.rgb(Color.red(color),Color.green(color), Color.blue(color)),PorterDuff.Mode.MULTIPLY));
现在这实际上并没有改变我想要的源图像颜色。那总是白色的。
我的问题是,在我丢失了用于设置它的数据后,我正试图很好地引用颜色。我想长按ImageView并获得它的颜色。
我在下面的问题中找到了一些代码,但它似乎不起作用,因为它总是返回白色(255,255,255),这是原始图像的颜色,但不是过滤器。 How to Get Pixel Colour in Android?
ImageView imageView = ((ImageView)v);
Bitmap bitmap = ((BitmapDrawable)imageView.getDrawable()).getBitmap();
int pixel = bitmap.getPixel(x,y);
int redValue = Color.red(pixel);
int blueValue = Color.blue(pixel);
int greenValue = Color.green(pixel);
我尝试了类似下面的内容,但是当我调用getColorFilter时它就崩溃了。
ImageView image = (ImageView)findViewById(R.drawable.bufferbuildercolor3);
ColorFilter test = image.getColorFilter();
我不知道还能做什么,除了找到实际网格位置的X / Y,然后在那个点获得屏幕背景颜色而不是图像。似乎应该有一个更简单的方法来做到这一点?
答案 0 :(得分:6)
您可以使用您稍后要检索的数据标记ImageView
(or any View
for that matter)。例如,使用您用于构建Color
的{{1}}标记视图:
PorterDuffColorFilter
显然,当相关视图发生时,标签会被垃圾收集。
或者,如果您修复它,第3段代码中的方法可能会有效。目前,您正在尝试通过查找 drawable ID来扩充视图 - 这没有意义。 id应该是Color tagColor = Color.rgb(Color.red(color),Color.green(color), Color.blue(color));
// tag
imageview.setTag(tagColor);
// get tag
tagColor = (Color) imageview.getTag();
的形式,即:
R.id.imageview_id