Android中动态调整ImageView的宽高比
16lz
2021-01-26
原理
我在实践中,是调整一个ListView中的Item里的ImageView元素的宽高比,类似微信公众号的消息内容,item有固定padding,然后ImageView宽度撑满屏幕,高度由一定比例决定。
- 在写好布局文件后,首先拿到整个屏幕的宽度,然后减去左右两侧的padding所占的宽度,得到的结果就是ImageView应该设置的宽度
- 再由一定比例计算出高度
- 最后以ImageView.setLayoutParams()完成宽高的设定
布局文件
<LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="10dp"> <ImageView android:id="@+id/item_notice_iv" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="fitXY" />LinearLayout>
代码块
//初始化ImageView mImageView = (ImageView) findViewById(R.id.item_notice_center_iv);mImageView.setAdjustViewBounds(true);//获取屏幕宽度WindowManager m = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);DisplayMetrics outMetrics = new DisplayMetrics();m.getDefaultDisplay().getMetrics(outMetrics);//计算宽高,我需要的图片尺寸是280*136int width = outMetrics.widthPixels - DensityTool.dp2px(this, 10f) * 2; //乘以2是因为左右两侧的宽度int height = (int) (width / 280f * 136); //280*136//设置图片参数ViewGroup.LayoutParams layoutParams = mImageView.getLayoutParams();layoutParams.width = width;layoutParams.height = height;mImageView.setLayoutParams(layoutParams);
DensityTool
这是我自己造的一个轮子,主要用于像素转换,非常实用的!
public class DensityTool { //根据手机的分辨率从 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; }}
其他参考
1、android中使用DisplayMetrics获取屏幕参数
2、ImageView.ScaleType设置图解
更多相关文章
- 【Android】侧滑菜单
- 关于 Android(安卓)opencv 屏幕方向的bug
- Android(安卓)OpenGL ES 播放 yuv420p文件
- AndroidUI设计中的特效界面左右…
- Android图像处理(2):怀旧效果
- 动手学Android之四——布局初步(一)
- Android实现自适应正方形GridView
- Android分辨率适配心得
- android 文件夹的命名和作用,屏幕适配很有用!