Android - 使用ColorFIlter从ColorView获取颜色应用于Drawable

Ben*_*654 5 android android-imageview android-gridview android-drawable

我试图在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));
Run Code Online (Sandbox Code Playgroud)

现在这实际上并没有改变我想要的源图像颜色.这始终是白色的.

我的问题是,在我丢失了用于设置它的数据后,我正在尝试很好地引用颜色.我想长按ImageView并获得它的颜色.

我在下面的问题中找到了一些代码,但它似乎不起作用,因为它总是返回白色(255,255,255),这是原始图像的颜色,但不是过滤器.如何在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);
Run Code Online (Sandbox Code Playgroud)

我尝试过类似下面的东西,但是当我调用getColorFilter时它就崩溃了.

ImageView image = (ImageView)findViewById(R.drawable.bufferbuildercolor3);
ColorFilter test = image.getColorFilter();
Run Code Online (Sandbox Code Playgroud)

我不知道还能做什么,除了找到实际网格位置的X/Y,然后在那个点获得屏幕背景颜色而不是图像.似乎应该有一个更简单的方法来做到这一点?

MH.*_*MH. 6

您可以使用您有兴趣稍后检索的数据标记ImageView(或任何View相关内容).例如,Color使用与构造视图相同的视图标记视图PorterDuffColorFilter:

Color tagColor = Color.rgb(Color.red(color),Color.green(color), Color.blue(color));
// tag
imageview.setTag(tagColor);

// get tag
tagColor = (Color) imageview.getTag();
Run Code Online (Sandbox Code Playgroud)

显然,当相关视图执行时,标记将被垃圾收集.

或者,如果您修复它,第3段代码中的方法可能会有效.目前,您正在尝试通过查找可绘制的 ID 来扩充视图- 这没有意义.id应该是以下形式R.id.imageview_id:

ImageView image = (ImageView) findViewById(R.id.imageview);
ColorFilter test = image.getColorFilter();
Run Code Online (Sandbox Code Playgroud)