背景:您可能希望在程序运行时调整view的大小。 举个例子吧。
接下来是imageView。 动态设置并进入位图。 如果位图的纵横比与imageView的纵横比不同,imageView会出现黑边现象。 请参阅下图:-(
QQ浏览器屏幕截图20180722230920.png
如果更改ImageView的高度以消除ImageView的宽高比=bitmap的宽高比黑边,则根据实际项目需求,bitmap资源往往从网络加载,并且加载bitmap 为了移除ImageView的黑色边缘,必须动态更改image的纵横比。 效果图如下所示
change.gif
上传代码
collapsingtoolbarlayout.layoutparamslayoutparams=newcollapsingtoolbarlayout.layout params (1080,getbitmapheight ) )字节
imageview.setlayoutparams;
代码分析:
首先,请知道要调整大小的视图位于什么布局中。 (线性布局,关系布局,)以及与新的布局对应的布局参数
这里的imageView位于CollapsingToolbarLayout中,因此newcollapsingtoolbarlayout.layout params;
为了控制view的大小,可以输入/修改各种宽高参数。
优化(正文重点) )
不得不说上面的过程还是很麻烦的。 如果布局参数类型错误,程序将以分钟为单位抛出异常。 也可以每次都到布局中查找相应的父布局,然后生成相应的布局参数对象。
优化方法:使用反射生成与视图相对应的布局参数对象。
先看看图吧
QQ浏览器的屏幕截图20180722233627.png
从官网上看,所有LayoutParams都是ViewGroup.LayoutParams的子类。
反射布局参数代码:
classextendsviewgroup.layoutparamslayoutparamsclass=imageview.getlayoutparams ().getClass );
imageview.setlayoutparams (layoutparamsclass.getdeclaredconstructor (int.class,int.class ).newinstance ) 1080,
分析:
imageView.getLayoutParams ().getClass )获取类名,getDeclaredConstructor调用具有参数的方法,newInstance生成对象
这样,通过反射绕过了实例化布局参数时可能出现的与父视图布局参数不匹配的问题。