原理

我在实践中,是调整一个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设置图解

更多相关文章

  1. 【Android】侧滑菜单
  2. 关于 Android(安卓)opencv 屏幕方向的bug
  3. Android(安卓)OpenGL ES 播放 yuv420p文件
  4. AndroidUI设计中的特效界面左右…
  5. Android图像处理(2):怀旧效果
  6. 动手学Android之四——布局初步(一)
  7. Android实现自适应正方形GridView
  8. Android分辨率适配心得
  9. android 文件夹的命名和作用,屏幕适配很有用!

随机推荐

  1. android OTG (USB读写,U盘读写)最全使用相
  2. android camera 各版本差异
  3. Android牟利之道(一)--界面嵌入有米广告
  4. Android(安卓)startActivity源码详解
  5. Android(安卓)数据库对比
  6. 深入理解Android插件化技术
  7. Android高手进阶教程(二)之----Android(
  8. Myeclipse 安装时候android adt, android
  9. 热点:Android(安卓)10(Android(安卓)Q)发布
  10. Mac上非常好用的免费的Android文件传输工