原理
- 在写好布局文件后,首先拿到整个屏幕的宽度,然后减去左右两侧的padding和margin所占的宽度,得到的结果就是ImageView应该设置的宽度
- 再由一定比例计算出高度
- 最后以ImageView.setLayoutParams()完成宽高的设定
布局文件
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="22dp">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY" />
</LinearLayout>
代码块
ImageView image = findViewById(R.id.image);
int w = DensityTool.getScressWidth(mContext);
int width = w - DensityTool.dp2px(mContext, 22f) * 2;//乘以2是因为左右两侧的宽度
int height = (int)(width * 0.424);//设置高度为宽度的0.424倍
DensityTool.setWH(image, width, height);
DensityTool
这是我自己造的一个轮子,主要用于像素转换,非常实用的!
package com.pande.elec.pandemimi.utils;
import android.content.Context;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
public class DensityTool {
//获取屏幕宽度
public static int getScressWidth(Context context){
WindowManager m = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
m.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.widthPixels;
}
//获取屏幕高度
public static int getScresHeight(Context context){
WindowManager m = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics outMetrics = new DisplayMetrics();
m.getDefaultDisplay().getMetrics(outMetrics);
return outMetrics.heightPixels;
}
//根据手机的分辨率从 dp 的单位 转成为 px(像素)
public static float dp2px(Resources resources, float dpValue) {
final float scale = resources.getDisplayMetrics().density;
return (dpValue * scale + 0.5f);
}
//根据手机的分辨率从 dp 的单位 转成为 px(像素)
public static int dp2px(Context context, float dpValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int)(dpValue * scale + 0.5f);
}
//根据手机的分辨率从 px(像素) 的单位 转成为 dp
public static float px2dp(Resources resources, float pxValue) {
final float scale = resources.getDisplayMetrics().density;
return (pxValue / scale + 0.5f);
}
//获取屏幕dpi
public static int getDpi(Context context) {
return context.getResources().getDisplayMetrics().densityDpi;
}
//动态设置view的宽高
public static void setWH(View view, int width, int height){
ViewGroup.LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = width;
layoutParams.height = height;
view.setLayoutParams(layoutParams);
}
}