8

そのため、画面の面積に応じて画像のサイズを変更する必要があります。画像は画面の高さの半分にする必要があります。そうしないと、一部のテキストと重なるためです。

したがって、高さ=1/2画面の高さ。幅=高さ*アスペクト比(アスペクト比を同じに保とうとしているだけです)

私は次のようなものを見つけました:

Display myDisplay = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width =myDisplay.getWidth();
int height=myDisplay.getHeight();

しかし、Javaで画像の高さを変更するにはどうすればよいですか?または可能であればXMLでさえ?実用的な答えが見つからないようです。

4

1 に答える 1

18

LayoutParamsこれはコードで行うことができます。残念ながら、XMLを使用してパーセンテージを指定する方法はありません(直接ではなく、重みをいじることはできますが、それが常に役立つとは限らず、アスペクト比を維持できません)が、これはうまくいくはずです:

//assuming your layout is in a LinearLayout as its root
LinearLayout layout = (LinearLayout)findViewById(R.id.rootlayout);

ImageView image = new ImageView(this);
image.setImageResource(R.drawable.image);

int newHeight = getWindowManager().getDefaultDisplay().getHeight() / 2;
int orgWidth = image.getDrawable().getIntrinsicWidth();
int orgHeight = image.getDrawable().getIntrinsicHeight();

//double check my math, this should be right, though
int newWidth = Math.floor((orgWidth * newHeight) / orgHeight);

//Use RelativeLayout.LayoutParams if your parent is a RelativeLayout
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    newWidth, newHeight);
image.setLayoutParams(params);
image.setScaleType(ImageView.ScaleType.CENTER_CROP);
layout.addView(image);

複雑すぎるかもしれませんが、もっと簡単な方法があるのでしょうか?しかし、これは私が最初に試したものです。

于 2011-01-25T20:42:45.810 に答える