1

私はカスタムビュー(と呼ばれるCustomStrechView)を持っextendsていImageViewます. このビューのポイントは、縦横比を失うことなくビュー全体に画像を表示できるようにすることです。

ほとんどのアプリケーションで使用すると問題なく動作しますCustomStrechViewが、 に適用しようとするとHorizontalScrollView、画像がすべて消えてしまいます。なぜこれが起こるのかわかりません。を削除しようとしました<HorizontalScrollView />が、画像が表示されると、設定が必要なプロパティがあるように感じますが、見つからないようです。

誰かが私が間違っていること、またはカスタムビューを で動作させるためのより良い方法を指摘できますHorizontalScrollViewか?


編集

これで少し遊んだ後、width寸法をハードコーディングした場合にのみ、カスタムビューに画像を表示できることがわかりました。つまり、次のようになります。

<com.example.dragdropshapes.CustomStrechView
    android:layout_width="200dp"

高さfill_parentはそのままでいいのですが…


コード:

カスタム ビューが xml ファイルでどのように使用されているかを次に示します。

<!-- Removing this makes the images show up -->
<HorizontalScrollView       
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:fillViewport="true"
    android:layout_marginTop="50dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:showDividers="middle"
        android:orientation="horizontal">

        <!-- Changing this to a normal ImageView makes the image show up -->
        <com.example.dragdropshapes.CustomStrechView
            android:id="@+id/pickshapes"
            android:layout_height="fill_parent"
            android:layout_width="fill_parent"
            android:clickable="true"
            android:onClick="pickShapes"
            android:background="@drawable/border"
            android:src="@drawable/ic_launcher"
            />
        <!-- There are 5 other custom ImageViews here -->
    </LinearLayout>
</HorizontalScrollView>

カスタム ビュー コードの主要部分は次のとおりです。

public class CustomStrechView extends ImageView{

  private final Drawable srcPic;
  private final String TAG = "strechyTag";
  private boolean changeSize = false;
  private int Xpx;
  private int Ypx;

    public CustomStrechView(Context context) {
        super(context);
        srcPic = this.getDrawable();
    }

     //... other constructors, not really important...

     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
         Log.d(TAG, "in the onMeasure!!\n");
         int width, height;

        width = MeasureSpec.getSize(widthMeasureSpec);
        height = width * srcPic.getIntrinsicHeight() / srcPic.getIntrinsicWidth();
        setMeasuredDimension(width, height);
    }
}
4

1 に答える 1