0

次の GridView を、stretchMode を「columnWidth」に設定して定義しています。

<GridView android:id="@+id/grid"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:columnWidth="160dp"
    android:numColumns="auto_fit"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:listSelector="@drawable/list_selector"
/>

GridView の各項目は、次のように構成されています。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"
    android:padding="2dp"
>
    <FrameLayout
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
    >
        <ImageView android:id="@+id/videoGridItemImage"
            android:layout_width="match_parent" 
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
        />
        <TextView android:id="@+id/videoGridItemDuration"
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"    
            android:layout_gravity="bottom"    
            android:background="#88000000"
            android:textColor="#F1F1F1"
            android:textAppearance="@android:style/TextAppearance.Small"
            android:padding="2dp"
        />
    </FrameLayout>
    <TextView android:id="@+id/videoGridItemTitle" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:textAppearance="@android:style/TextAppearance.Medium"
        android:textColor="#F1F1F1"
        android:maxLines="1"
        android:background="#88000000"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
    />
    <TextView android:id="@+id/videoGridItemSubtitle" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"
        android:gravity="left"
        android:textStyle="italic"
        android:textColor="#666"
        android:textAppearance="@android:style/TextAppearance.Small" 
        android:maxLines="1"
        android:background="#88000000"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
    />
</LinearLayout>

GridView のアダプターでは、ImageView の URL と参照を専用のクラスに渡すことで、画像の読み込みと表示を非同期に行っています。このクラスは画像をビットマップにダウンロードし、setImageBitmap() を使用して ImageView を更新します。このワークフローは期待どおりに機能します。ただし、私の画像は ImageView の幅全体を埋めていません。左右に少しパディングがあります。scaleType="fitXY" を使用できることはわかっていますが、画像が歪むため、これは理想的ではありません。ImageView の src 属性をローカル イメージに設定すると、stretchMode="columnWidth" で問題なくスケーリングされます。私の推測では、ImageView は元の columnWidth にスケーリングされており、ストレッチされた/動的な幅ではありません。なぜこれが発生しているのか、および/または修正方法について誰かが洞察を持っていますか? よろしくお願いします。

4

2 に答える 2

0

2つのオプションがあります。

  1. ImageViewのlayout_widthをwrap_contentに設定します。ImageViewは画像のサイズに基づいてサイズ変更され、それに応じて列が調整されます。

  2. ImageViewのscaleTypeをcenterCropに設定します。これにより、画像を歪ませることなく画像ビューに合わせようとし、合わない余分な部分を切り取ります。これにより、空白は残りません。

于 2012-06-05T04:45:07.227 に答える