Android 开发中图片的适配,全面理解 imageview 的 ScaleType 属性,并做好适配
前言:Android 机型的种类大家都知道,适配一直都是一个大问题。所以一直以来对于开发者都是用多套图来做适配。这样做可以解决部分适配问题,但是缺点就是给 app 带来了负担,导致 app 包特别的大。
关于 imageview 的缩放类型 fitxy:这个是最好理解的,在 xy 的方向上铺满 imageview,就像 background 一样。所以说是很有可能拉伸图片的。那么配合它使用的另一个属性就要登场了:android:adjustViewBounds="true" 她的意思就是是否保持原始比例,设置为 true 就是保持原始比例。亲测过确实是原始比例。在网上搜了一下看到说这个必须配合 maxWidth 和 maxHeight 使用,我没有设置这个,但是 imageview 的宽高都是 wrapContent,效果就是他会在这个 imageview 的范围内按照原始比例 "裁剪" 到最大的尺寸,不一定会铺满这个 imageview。 fitStart:字面意思就是适配最开始的位置,我们的习惯就是从左上开始,那么图片就会从左上角开始等比例的放大,直到一个方向上撑满停止。这个属性值用到的机会很少,这个解释也比较抽象,这里放上一张图辅助理解!
vc/yyc+wtLHIwP3J7NW5o6zWsbW90ru49re9z/LJz7PFwvrNo9a5" lazyload="/uploadfile/Collfiles/20170401/20170401091717533.jpg" title="\"/> fitEnd:和 fitStart 一样,不一样的是从右下角开始伸展,不再细说 fitCenter:等比例缩放,直到一个方向撑满,然后居中显示 center:不会缩放图片,居中显示,如果图片过大会超出屏幕 center_crop: 图片等比缩放,直到一个方向上撑满,居中显示,超出屏幕的地方会被裁剪 center_insid: 只有图片的长宽大于控件时,才会缩放图片,然后居中显示 matrix:宽度撑满居上或居下显示,高度撑满居左或居右显示。
以宽度撑满居上显示为例的使用方式:
1??:自定义 imageview,重写 setFrame 方法
- @Override protected boolean setFrame(int l, int t, int r, int b) {
- boolean changed = super.setFrame(l, t, r, b);
- if (getScaleType() == ScaleType.MATRIX) {
- transformMatrix();
- }
- return changed;
- }
- private void transformMatrix() {
- Matrix matrix = getMatrix();
- float w = getWidth();
- float cw = getDrawable().getIntrinsicWidth();
- float widthScaleFactor = w / cw;
- matrix.setScale(widthScaleFactor, widthScaleFactor, 0, 0);
- setImageMatrix(matrix);
- }
2??:布局中使用这个 imageview 并设置 scaleType 的属性为 matrix
总结
理解了上边的属性问题,我们就拿一张图来谈谈适配问题。图片的适配无非就是原比例显示,不能变形。我们可以根据像素转换为 dp 的形式设置 imageview 的宽高,然后拿最大的图来适配,上面说的所有的等比缩放的都可以使用。最常用的就是 center_crop 和 fitxy。但是这个必须小心使用。
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: http://www.92to.com/bangong/2017/04-01/19780015.html