android:如何以编程方式固定图像视图的大小?
android :how to fixed size of image view programatically?
我正在通过从图库中选择图片来设置帐户的个人资料图片,如下所示
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.profile_image :
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == GALLERY && resultCode != 0) {
profileImage.setImageBitmap(null);
if (Image != null)
Image.recycle();
Uri mImageUri = data.getData();
try {
Image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageUri);
profileImage.setImageBitmap(Image);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这很完美,但有一个问题,图像的高度和宽度会随着图像的不同而变化。我想要的是将图像大小和宽度固定为 150 dp?
以下是我的 xml 代码
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@android:drawable/sym_def_app_icon"
android:clickable="true"/>
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@android:drawable/sym_def_app_icon"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:clickable="true"/>
请将以上两个属性添加到您的 ImageView
您应该将 LayoutParams 设置为您要调整大小的视图:
private void resizeImageView(ImageView iv, int w, int h) {
//set width and height in pixels
iv.setLayoutParams(new ViewGroup.LayoutParams(w, h));
//or if w and h are in dp:
//iv.setLayoutParams(new ViewGroup.LayoutParams(dpToPx(this, w), dpToPx(this, h)));
}
private int dpToPx(Activity activity, int dp) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
您可以为此目的使用 "centerCrop" scaleType。
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="centerCrop"/>
其他比例类型是:
中心
使图像在视图中居中,但不执行缩放。
CENTER_CROP
统一缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。
CENTER_INSIDE
统一缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)。
FIT_CENTER
使用 CENTER 缩放图像。
FIT_END
使用 END 缩放图像。
FIT_START
使用 START 缩放图像。
FIT_XY
使用 FILL 缩放图像。
矩阵
绘图时使用图像矩阵进行缩放。
我正在通过从图库中选择图片来设置帐户的个人资料图片,如下所示
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.profile_image :
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == GALLERY && resultCode != 0) {
profileImage.setImageBitmap(null);
if (Image != null)
Image.recycle();
Uri mImageUri = data.getData();
try {
Image = MediaStore.Images.Media.getBitmap(this.getContentResolver(), mImageUri);
profileImage.setImageBitmap(Image);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这很完美,但有一个问题,图像的高度和宽度会随着图像的不同而变化。我想要的是将图像大小和宽度固定为 150 dp? 以下是我的 xml 代码
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@android:drawable/sym_def_app_icon"
android:clickable="true"/>
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
app:srcCompat="@android:drawable/sym_def_app_icon"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:clickable="true"/>
请将以上两个属性添加到您的 ImageView
您应该将 LayoutParams 设置为您要调整大小的视图:
private void resizeImageView(ImageView iv, int w, int h) {
//set width and height in pixels
iv.setLayoutParams(new ViewGroup.LayoutParams(w, h));
//or if w and h are in dp:
//iv.setLayoutParams(new ViewGroup.LayoutParams(dpToPx(this, w), dpToPx(this, h)));
}
private int dpToPx(Activity activity, int dp) {
DisplayMetrics metrics = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, metrics);
}
您可以为此目的使用 "centerCrop" scaleType。
<ImageView
android:id="@+id/profile_image"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="centerCrop"/>
其他比例类型是:
中心
使图像在视图中居中,但不执行缩放。
CENTER_CROP
统一缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或大于视图的相应尺寸(减去填充)。
CENTER_INSIDE
统一缩放图像(保持图像的纵横比),使图像的两个尺寸(宽度和高度)等于或小于视图的相应尺寸(减去填充)。
FIT_CENTER
使用 CENTER 缩放图像。
FIT_END
使用 END 缩放图像。
FIT_START
使用 START 缩放图像。
FIT_XY
使用 FILL 缩放图像。
矩阵
绘图时使用图像矩阵进行缩放。