ImageView恢复回收视图的背景颜色

时间:2013-11-15 14:38:27

标签: android imageview background-color reset convertview

在我的Android App中,我使用AlertBox来选择图标。 这是通过自定义适配器完成的。我有一个来自ImageView的类,它改变旧选择图标的背景颜色。

所有工作都很好,我希望我可以重置适配器中转换视图的背景颜色。 getBackGroundDrawable总是返回null?任何想法???

public View getView(int position, View convertView, ViewGroup parent)
{
    JIconImageView imageView = ((convertView == null) ? new JIconImageView(m_context) : (JIconImageView)convertView);

    imageView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
    imageView.setPadding(2, 2, 2, 2);
    imageView.setIsSelected(m_selected == position);
    imageView.setImageResource(JEntryIconHelper.getIconFromIndex(position));

    return imageView;
}

并从公共最终类JIconImageView扩展ImageView enter code here

public void setIsSelected(boolean bSelected)
{
    if (m_bSelected = bSelected)
        setBackgroundColor(SELECTED_BACKCOLOR);
    else setBackgroundDrawable(m_background);
}

1 个答案:

答案 0 :(得分:0)

据我所知,目前的主题背景颜色并不容易。

执行所需操作的一种可靠方法是在getView期间将原始背景颜色保存在成员变量中(或者您可以通过创建一次性JIconImageView来执行此操作一次)。例如,在绑定适配器的位置:

JIconImageView imageView = new JIconImageView (...);
Drawable origBackground = imageView.getBackground();
imageView = null;

然后,在setIsSelected()中引用imageView.getBackground()。


另一种方法是使用xml选择器;这可以在你的“drawables”文件夹中找到:

<selector 
  xmlns:android="http://schemas.android.com/apk/res/android">

  <item 
    android:state_selected="true"
    android:drawable="@drawable/your_selected_drawable" />

  <item 
    android:drawable="@drawable/your_unselected_drawable" />
</selector>

正如你所看到的,这个解决方案使用的是drawables而不是color,但是,如果你的图标是固定的大小,这是一个微不足道的差异(也许类似的东西可以用颜色完成 - 你必须研究它)。这种方法的缺点是你现在已经硬编码了背景颜色。但至少这些定义在您的资源中。


您可以通过在图标定义中引用Android样式来构建上述内容,如下所示:

<JIconImageView
  android:id=...
  android:background="@drawable/jicon_background_selector />