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定義します。FrameLayoutonClickイベントをにではなくに割り当てるように注意してください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ドローアブルにのみ適用されます。次のように、クリックアクションを実装するオーバーレイビューで2番目のオプションを使用することを検討してください。

    <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 に答える