╔══════════════════════════════════════════════╗ ^
║ ImageView ╔══════════════╗ ║ |
║ ║ ║ ║ |
║ ║ Actual image ║ ║ |
║ ║ ║ ║ |60px height of ImageView
║ ║ ║ ║ |
║ ║ ║ ║ |
║ ╚══════════════╝ ║ |
╚══════════════════════════════════════════════╝
<------------------------------------------------>
90px width of ImageView
デフォルトの高さと幅を持つ画像ビューがあり、画像はdbに格納されているので、Imageviewの高さの幅に従って画像を拡大縮小したいと思います。デフォルトの値を指定したくないので、高さと幅を変更するたびにコードでも変更する必要があります。
ImageViewの高さと幅を取得しようとしていますが、どちらの場合も0が返されます。
int height = ((ImageView) v.findViewById(R.id.img_ItemView)).getHeight();
デフォルトの高さと幅を持っていても0を返します
この質問 に関する私の答えはあなたを助けるかもしれません:
int finalHeight, finalWidth;
final ImageView iv = (ImageView)findViewById(R.id.scaled_image);
final TextView tv = (TextView)findViewById(R.id.size_label);
ViewTreeObserver vto = iv.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
iv.getViewTreeObserver().removeOnPreDrawListener(this);
finalHeight = iv.getMeasuredHeight();
finalWidth = iv.getMeasuredWidth();
tv.setText("Height: " + finalHeight + " Width: " + finalWidth);
return true;
}
});
その後、onPreDraw()メソッド内から画像の拡大縮小作業を追加できます。
このプロパティを設定しただけで、今やAndroid OSがあらゆることに気を配っています。
Android:adjustViewBounds = "true"
ImageViewを植えたあなたのlayout.xmlでこれを使ってください:D
画像の幅と高さはその描画可能要素によって得られます。
int width = imgView.getDrawable().getIntrinsicWidth();
int height = imgView.getDrawable().getIntrinsicHeight();
ImageViewの寸法が0である理由は、それらを照会しているとき、ビューはまだレイアウトと測定のステップを実行していないためです。あなたはそれがレイアウトの中でどのように "振る舞う"かについてビューに言いました、しかしそれはまだ各ビューをどこに置くべきか計算しませんでした。
画像ビューに与えるサイズをどのように決めますか?ネイティブに実装されているスケーリングオプションの1つを単に使用できませんか。
UIスレッドへの投稿は私のために働きます。
final ImageView iv = (ImageView)findViewById(R.id.scaled_image);
iv.post(new Runnable() {
@Override
public void run() {
int width = iv.getMeasuredWidth();
int height = iv.getMeasuredHeight();
}
});
あなたのxmlファイル:
<ImageView Android:id="@+id/imageView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/image"
Android:scaleType="fitXY"
Android:adjustViewBounds="true"/>
あなたのJavaファイル:
ImageView imageView = (ImageView)findViewById(R.id.imageView);
int width = imageView.getDrawable().getIntrinsicWidth();
int height = imageView.getDrawable().getIntrinsicHeight();
最も簡単な方法は、アクティビティのonWindowFocusChangedメソッドでImageViewの幅と高さを取得することです。
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
height = mImageView.getHeight();
width = mImageView.getWidth();
}
私はあなたがAndroid OSにあなたのためにこれの世話をさせることができると思います。 ImageViewのスケールタイプをfitXY
に設定すると、表示される画像は現在のビューサイズに合わせてサイズ調整されます。
<ImageView
Android:layout_width="90px"
Android:layout_height="60px"
Android:scaleType="fitXY" />
複数の画像を動的に作成した場合、これを試してみてください。
//画像配列を初期化します
private ImageView myImages[] = new ImageView[your_array_length];
//プログラム的に作成し、親ビューにを追加
for (int i = 0; i < your_array_length; i++) {
myImages[i] = new ImageView(this);
myImages[i].setId(i + 1);
myImages[i].setBackgroundResource(your_array[i]);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
frontWidth[i], frontHeight[i]);
((MarginLayoutParams) params).setMargins(frontX_axis[i],
frontY_axis[i], 0, 0);
myImages[i].setAdjustViewBounds(true);
myImages[i].setLayoutParams(params);
if (getIntent() != null && i != your_array,length) {
final int j = i;
myImages[j].getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
myImages[j].getViewTreeObserver().removeOnPreDrawListener(this);
finalHeight = myImages[j].getMeasuredHeight();
finalWidth = myImages[j].getMeasuredWidth();
your_textview.setText("Height: " + finalHeight + " Width: " + finalWidth);
return true;
}
});
}
your_parent_layout.addView(myImages[i], params);
}
// それでおしまい。ハッピーコーディング.