【问题标题】:Change image in ImageView在 ImageView 中更改图像
【发布时间】:2017-10-22 17:35:06
【问题描述】:

在 list_item.xml 文件中,我有一个 ImageView 和一个 TextView。 ImageView 的代码为

 <ImageView
    android:id="@+id/play"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/play"/>

在主活动中(main_activity.java 与activity_main.xml 连接,有一个ListView),当用户点击setAdapter 设置的列表中的音乐(onItemClick)时,音乐播放良好。现在我想改变这个 ImageView 的图像,当音乐开始播放时,当 .所以我插入了如下代码:

View inflatedView = getLayoutInflater().inflate(R.layout.list_item, null);
ImageView imgchange = (ImageView)inflatedView.findViewById(R.id.play);
imgchange.setImageResource(R.drawable.pause);

但它不起作用。我也试过了

android:src="@drawable/imagename"

我也试过

imgchange.setBackgroundResource(R.drawable.pause);

寻找有价值的建议,我该怎么做或错误在哪里?

【问题讨论】:

  • 设置 imsgeresource :: imgchange.drawableStateChanged() 后试试这个
  • 显示你的 MainActivity.java

标签: java android


【解决方案1】:

我会使用新的ContextCompat 而不是setBackgroundResource(),如下所示:

imageView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.pause));

您可以将Activity 作为Context 传递。如果这不起作用,您还可以尝试使您的视图无效,这将强制重绘。

【讨论】:

  • 感谢您的回答。我试过 imgchange.invalidate();然后插入 setBackgroundResource(R.drawable.pause),但没有运气。我也尝试了代码 ContextCompat 但它显示错误
  • 哇,现在它可以工作了,但是图像大小会产生问题。因为它现在超出并与 TextView 重叠
  • 你可以给你的ImageView一个预定义的高度和宽度,你也可以指定scaletype。
  • 是的,你说得对。非常感谢。我也可以为此添加动画吗?就像音乐播放动画开始时一样,而不仅仅是更改一张图像。我可以用同样的方式吗?为此,我在 drawable 中创建了一个 anim.xml 文件
  • 是的,但我们不能在这里讨论。如果对您有帮助,请将其标记为答案。
【解决方案2】:

我过去也遇到过类似的问题,这是由于布局没有自行更新造成的。更改图像后尝试刷新视图的布局,如下所述android redraw layout programmatically

【讨论】:

  • 感谢您的建议。我试过了,但没有运气
猜你喜欢
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
相关资源
最近更新 更多