Android ImageView 图片自适应问题记录

您所在的位置:网站首页 androidimg Android ImageView 图片自适应问题记录

Android ImageView 图片自适应问题记录

#Android ImageView 图片自适应问题记录| 来源: 网络整理| 查看: 265

困惑了一周的问题,imageview里的图片是后端返回的,包括返回了图片的宽高,开始利用layoutpararams代码里设置了,不清楚为什么没有生效,后来就忘记优化了。在上线前夕,产品提出了这个优化点,满头雾水。当时想的是有没有可能是后端返回的图片的问题,(产品说ios是好的)。。。。无语(自己技术太菜) 没办法硬着头皮搞

scaleType

网上大多数多要用这个方法,我也设置了,就是不好使,感觉还是得从代码里设置,于是再次调用了layoutParams

holder.getView(R.id.dod_image)?.apply {//layoutParams的单位为px 后端返回的为dp,需要借助ScreenUtils转换 var params=this.layoutParams params.height=bean.gradeImgHeight params.width= bean.gradeImgWidth this.layoutParams=params }

这个是第一反应写出的代码,我靠!!!不行啊,显示出来的图片就一点点, 这是为啥啊,百思不得其解,于是我就把xml里的宽高都设置为0,layoutparams里的宽高设置为ui给出的宽高,好家伙,还是不行,但是明显的看出不是layoutparams没生效,而是值不对,于是再次点开了layoutparams源码 发现了事情的缘由

layoutparamt的单位是px!!!!!不是dp holder.getView(R.id.dod_image)?.apply {//layoutParams的单位为px 后端返回的为dp,需要借助ScreenUtils转换 var params=this.layoutParams params.height=com.app.hubert.guide.util.ScreenUtils.dp2px(context,bean.gradeImgHeight+14) params.width= com.app.hubert.guide.util.ScreenUtils.dp2px(context,bean.gradeImgWidth+18) this.layoutParams=params }

借助转换工具转换一下就好了

package com.app.hubert.guide.util; import android.app.Activity; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; import android.view.Display; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.ViewConfiguration; /** * Created by hubert *

* Created on 2017/7/27. */ public class ScreenUtils { private ScreenUtils() { throw new AssertionError(); } /** * dp单位转成px * * @param context context * @param dp dp值 * @return px值 */ public static int dp2px(Context context, int dp) { return (int) (dp * context.getResources().getDisplayMetrics().density); } /** * 获取屏幕宽度 */ public static int getScreenWidth(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); return dm.widthPixels; } /** * 获取屏幕高度 */ public static int getScreenHeight(Context context) { DisplayMetrics dm = context.getResources().getDisplayMetrics(); return dm.heightPixels; } /** * 获取状态栏高度 */ public static int getStatusBarHeight(Context context) { // 一般是25dp int height = dp2px(context, 20); LogUtil.i("common statusBar height:" + height); //获取status_bar_height资源的ID int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { height = context.getResources().getDimensionPixelSize(resourceId); LogUtil.i("real statusBar height:" + height); } LogUtil.i("finally statusBar height:" + height); return height; } /** * 虚拟操作拦(home等)是否显示 */ public static boolean isNavigationBarShow(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { Display display = activity.getWindowManager().getDefaultDisplay(); Point size = new Point(); Point realSize = new Point(); display.getSize(size); display.getRealSize(realSize); return realSize.y != size.y; } else { boolean menu = ViewConfiguration.get(activity).hasPermanentMenuKey(); boolean back = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK); if (menu || back) { return false; } else { return true; } } } /** * 获取虚拟操作拦(home等)高度 */ public static int getNavigationBarHeight(Activity activity) { if (!isNavigationBarShow(activity)) return 0; int height = 0; Resources resources = activity.getResources(); //获取NavigationBar的高度 int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) height = resources.getDimensionPixelSize(resourceId); LogUtil.i("NavigationBar的高度:" + height); return height; } }

这是工具类没事了,吐槽完毕拜拜



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3