在Android上使用Picasso(Square)时如何拥有ImageView选择器?

时间:2014-06-05 23:43:32

标签: android android-imageview picasso

我知道Picasso设置了“src”因此让“image.background”平静下来,但我似乎无法让ImageView响应选择器(就像触摸时显示标准的全息选择器或任何自定义一样)一)。

有人有工作样本吗?我肯定错过了什么。我尝试过不同的选择器,但我没有看到触摸状态。

我已尝试在onClick()中执行setselected(true)但我知道如果有一个类似于以下状态的drawable,View会自动处理这个:

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

  <item android:state_window_focused="false" android:drawable="@android:color/transparent" />

  <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
  <item android:state_focused="true"  android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/abc_list_selector_disabled_holo_light" />
  <item android:state_focused="true"  android:state_enabled="false"                              android:drawable="@drawable/abc_list_selector_disabled_holo_light" />
  <item android:state_focused="true"                                android:state_pressed="true" android:drawable="@drawable/abc_list_selector_background_transition_holo_light" />
  <item android:state_focused="false"                               android:state_pressed="true" android:drawable="@drawable/abc_list_selector_background_transition_holo_light" />
  <item android:state_focused="true"                                                             android:drawable="@drawable/abc_list_focused_holo" />

</selector>

加载图片的Java代码是:

Picasso.with(mContext).load(url).error(R.drawable.error).fit().into(holder.someIV);

someIV的XML看起来像:

<ImageView
    android:id="@+id/list_item_image"
    android:layout_width="match_parent"
    android:layout_height="@dimen/mixset_list_image_size"
    android:layout_marginTop="1dp"
    android:layout_marginLeft="1dp"
    android:layout_marginRight="1dp"
    android:contentDescription="@string/mixes"
    android:scaleType="centerCrop"
    android:background="@drawable/mix_list_art_selector"
    android:cropToPadding="false" />

背景设置为上面的选择器。

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

这就是我的所作所为:

我想强调的是一个ImageView,它是list_item布局的一部分(技术上讲,一行)。

但我并不想突出显示整行,只是内部的图像。

我必须将ImageView包装在FrameLayout中。

  <FrameLayout
    android:id="@+id/list_item_image_wrapper"
    android:layout_width="match_parent"
    android:layout_height="@dimen/mixset_list_image_size"
    android:clickable="true"
    android:foreground="@drawable/mix_list_art_selector">
  <ImageView
      android:id="@+id/list_item_image"
      android:layout_width="match_parent"
      android:layout_height="@dimen/mixset_list_image_size"
      android:layout_marginTop="1dp"
      android:layout_marginLeft="1dp"
      android:layout_marginRight="1dp"
      android:contentDescription="@string/mixes"
      android:scaleType="centerCrop"
      android:clickable="false"
      android:focusable="false"
      android:cropToPadding="false" />
</FrameLayout>

...并将Click Listeners移动到FrameLayout。

感谢@jason_t指向解决方案的指针。

请注意,对于像TextView这样的其他小部件,可能不需要上面的内容。