私はカスタムビュー(と呼ばれる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);
}
}