LT.ee("px="+ConvertUtils.dp2px(24));
Glide.with(mActivity)//打印出48px
.load("http://attachments.gfan.com/attachments2/day_110615/1106151509f6d875b078d5a4c4.jpg")
.crossFade(500)
.placeholder(R.drawable.ic_account_circle_black_24dp)
.bitmapTransform(new CropCircleTransformation(mActivity))
.override(ConvertUtils.dp2px(24), ConvertUtils.dp2px(24))
.into(mActivity.getTopBar().getViewL1());
<ImageView
android:id="@+id/NavigateOperation_L1"
android:layout_width=“50dp"
android:layout_height="wrap_content"
android:clickable="false"
android:scaleType="fitCenter"
android:src="@drawable/left_arrow"
android:visibility="visible" />
这是加载图片的代码和ImageView的xml
这时出现一个诡异的bug,当我把ConvertUtils.dp2px(XX)设置30 20 16时在页面上的大小都一样,设置成15的时候又会突然变非常小,
android:scaleType="fitCenter”
fitCenter和centerInside都是一样的结果.
猜测是设置图片的方式有异常,之前的图片都是使用setImageResource设置的,setImageResource会自动适应图片空间的宽高,而Gilde则是使用setImageDrawable设置,具体可以参考
http://blog.youkuaiyun.com/hoyouly/article/details/52839015#setimagebitmap
setImageResource():这个方法是在UI线程中对图片读取和解析的,所以有可能对一个Activity的启动造成延迟。所以如果顾虑到这个官方建议用setImageDrawable和setImageBitmap来代替。
setImageBitmap():实际上setImageBitmap做的事情就是把Bitmap对象封装成Drawable对象,然后调用setImageDrawable来设置图片,不如直接使用setImageDrawable()
setImageDrawable():setImageDrawable是最省内存高效的,如果担心图片过大或者图片过多影响内存和加载效率,可以自己解析图片然后通过调用setImageDrawable方法进行设置。
后来发现了adjustViewBounds可以满足需求,代码如下
<ImageView
android:id="@+id/NavigateOperation_L1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxHeight="28dp"
android:maxWidth="28dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:adjustViewBounds="true"
android:clickable="false"
android:scaleType="fitCenter"
android:src="@drawable/left_arrow"
android:visibility="visible" />
关键在于adjustViewBounds和maxHeight\maxWidth配合使用
就可以保证宽高一致