文章目录[隐藏]
关于图片适配的一点心得总结
App中图片适配,如何让一张720*1280的图片在普通屏幕和全面屏上显示,并且不被拉伸形变?
假设我们期望的效果是图片不能被拉伸产生形变(可以拉伸,不变形就可以),并且宽度是整个屏幕的宽度,高度的话,普通屏按照16:9的话,是填充整个屏幕高度的,全面屏的话,一般是18:9或者更多,这种情况下,如果图片是按照16:9的比例拉伸,全面屏的高度是不能填充整个屏幕的,只能让图片居中,上下都留黑色的区域。如果我们期望的就是这样的效果,那么从代码层面改如何实现?
第一种方式
ImageView imageView = new ImageView(this); imageView.setImageResource(imageIdArray[i]);
就是很普通的设置ImageResource,也不需要特意指定ScaleType,ImageView需要设置LayoutParams,填充父容器的宽高。
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); linearLayout.setLayoutParams(params);
这样就结束了,就可以很好的实现这种需求场景。
第二种方式
public class CustomImageView extends ImageView {
// some other necessary things
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
//force a 16:9 aspect ratio
int height = Math.round(width * 1.777f);
setMeasuredDimension(width, height);
}
}
设置一个指定了16:9比例的ImageView,这种就限定了宽高比。在设置ImageResource也可以达到上面的需求
假设我们不允许全面屏上显示的ImageView有上下空白区域,要求一定要填充满整个屏幕,那该怎么办?
这个时候肯定不能在按照上面的处理方式,而且得配置多张图片,图片针对性的适配普通屏16:9,全面屏18:9等这样的
设计师切图的时候就得给两张图片了,客户端根据屏幕的宽高比决定使用哪一张。
根据需求场景决定获取这张图片的方式,可以从服务端获取,也可以就在本地自己判断等
那么拿到图片之后怎么办?我们需要图片填充整个屏幕,最好设置图片的ScaleType为fitXY,拉伸宽高到整个屏幕
<ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="fitXY" android:src="@drawable/splash" android:id="@+id/imageView" />
加载图片
Glide.with(this) .load(url) .into(imageView);
这是最近关于图片的一点小小的总结。我觉得还是值得记录下的。