【问题标题】:Setting Foreground of AppCompatImageView programatically Android API 19以编程方式设置 AppCompatImageView 的前景 Android API 19
【发布时间】:2017-10-30 07:09:14
【问题描述】:

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

我尝试使用LayerDrawable,但如果我使用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);

这就是最终的样子:

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

【问题讨论】:

    标签: android android-drawable layerdrawable


    【解决方案1】:

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

    imageView.setBackgroundResource(id)

    imageView.setImageResource(R.drawable.ic_selected)

    如果复选标记的大小是理想的,则使用 CENTER 的 scaleType 或带有填充的 CENTER_INSIDE 应该得到你想要的。

    【讨论】:

    • 抱歉,在我原来的问题中忘了提到这一点,我使用背景元素在GridLayout中的元素周围放置边框
    猜你喜欢
    • 2013-01-06
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    相关资源
    最近更新 更多