有没有办法在不保留原始图像的单独灰色副本的情况下在Android中使用ImageButton变灰?

时间:2016-07-04 14:16:57

标签: java android css grayscale android-imagebutton

我正在尝试ImageButton最初会产生灰色效果&选中后会变为原始颜色。我正在努力实现this之类的东西。我知道这可以在CSS中完成,但是想知道是否存在任何相当于它的Android属性/函数。

我读了一篇帖子here,似乎暗示我必须维护同一张图片的不同灰色副本才能实现这一目标。但如果有的话,它会消耗大量的内存来维护相同图像的2个副本,比方说100+ ImageButtons。

  

与常规Button,ImageButton或具有图像的Button不同   禁用时,背景不会变灰。你实际上必须使用   另一个图像或以一种看似灰色的方式处理它。

那么在Android中真的没办法用CSS中的灰度来实现吗?

感谢您的时间!!

2 个答案:

答案 0 :(得分:4)

如果您使用的是.png张图片,则可以使用ImageView滤镜属性。

public void setDisabled(ImageView imageView) {
    final ColorMatrix grayscaleMatrix = new ColorMatrix();
    grayscaleMatrix.setSaturation(0);

    final ColorMatrixColorFilter filter = new ColorMatrixColorFilter(grayscaleMatrix);
    imageView.setColorFilter(filter);
}

答案 1 :(得分:0)

我知道我可能已经很晚了,但是还有另一个选择-我遇到了试图解决的相同情况,并找到了一些简单的选择。

特别是对于ImageButton,我使用过setAlpha(floatValue);

示例:

private ImageButton btnPlay;
[...]
btnPlay.setAlpha(0.5f);

另一种为ImageView设置Alpha效果的方法(从技术上讲,它也扩展到ImageButton,它扩展了ImageView)-但是对我来说,它对ImageButton也无效。


此方法的缺点可能是,它不是实际的“灰色显示”。通过设置透明度,如果按钮后面的背景是纹理或图像,则可能会面临风险。此解决方案最适用于黑色,深色,白色,灰色等普通背景,这也有助于创建“灰色”感觉。

感谢提供有助于解决此缺点的评论。