0

我目前正在创建一个菜单,允许用户AppCompatImageView在 a 中选择一个,GridLayout并通过在图像的前景放置一个复选标记图标来显示该视图已被选中。在 api 23 中,我可以通过简单地调用来做到这一点,View.setForeground()但在较低的 api 中,该方法不存在。我可以使用某种解决方法吗?

我试过使用 aLayerDrawable但是如果我设置的图像android:src=高度不同,复选标记图标会被挤压。这是现在的代码:

AppCompatImageView imageView = (AppCompatImageView) view;

int id = getResources().getIdentifier("drawable/" + view.getTag(), null, getPackageName());
Drawable backgroundLayer = ContextCompat.getDrawable(this, id);
Drawable foregroundLayer = ContextCompat.getDrawable(this, R.drawable.ic_selected);

Drawable[] layers = {backgroundLayer, foregroundLayer};
LayerDrawable layerDrawable = new LayerDrawable(layers);
imageView.setImageDrawable(layerDrawable);

这就是最终的样子:

结果

当我希望支票是方形纵横比时。我想避免重做可绘制背景以使其成为方形纵横比,因为我还有大量其他可绘制对象也必须重做。

4

1 回答 1

0

您是否尝试将图像设置为背景并将复选标记设置为 src?一旦 ImageView 设置为固定大小以匹配图像的纵横比,它应该可以正常工作。

imageView.setBackgroundResource(id)

imageView.setImageResource(R.drawable.ic_selected)

如果复选标记的大小是理想的,则使用 CENTER 的 scaleType 或带有填充的 CENTER_INSIDE 应该可以满足您的需求。

于 2017-05-30T02:06:52.057 回答