2

所以。您知道当您点击 Google+ 应用中的帖子时,整个视图会变成蓝色。我也想这样做,但要使用 ImageView。

我有以下代码片段,将实际图像设置为背景,将选择器设置为主要资源。这看起来不错,但不尊重背景图像的 scaleType :

      <ImageView
            android:id="@+id/painting_image"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="@drawable/img"
            android:src="@drawable/selector"
            android:scaleType="centerCrop" />

顺便说一句,@drawable/selector它只是一个显示透明颜色的选择器state_pressed

<item android:state_pressed="true">
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
        <solid android:color="#44521400" />
    </shape></item>

如何在尊重 scaleType 的同时完成这项工作?

4

2 回答 2

8

将您包裹ImageView在 中FrameLayout,并将 定义FrameLayout为可点击。注意将 onClick 事件分配给FrameLayout,而不是ImageView,否则效果会中断!另请注意,foreground已设置为选择器,而不是background.

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:clickable="true"
        android:foreground="@drawable/imagebutton_selector" >

        <ImageView
            android:id="@+id/painting_image"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:scaleType="centerCrop" />

    </FrameLayout>
于 2012-12-05T23:03:25.717 回答
1

ScaleType 仅适用于 src 可绘制对象,而不适用于背景。考虑将第二个选项与覆盖视图一起使用,您将在其中实现点击操作,如下所示:

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/painting_image"
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:scaleType="centerCrop" />

        <View
            android:layout_width="match_parent"
            android:layout_height="250dp"
            android:background="@drawable/imagebutton_selector"
            android:onClick="onImageClick" />
     </FrameLayout>
于 2012-12-05T22:58:20.207 回答