关于图片适配的一点心得总结

Android AUmaWSsSoi 1个月前 (08-17) 65次浏览 0个评论
文章目录[隐藏]

关于图片适配的一点心得总结

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);

这是最近关于图片的一点小小的总结。我觉得还是值得记录下的。


java问与答 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:http://javaexception.com/archives/200
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址