博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[积累]FitWidth ImageView和TopCrop ImageView
阅读量:6069 次
发布时间:2019-06-20

本文共 3122 字,大约阅读时间需要 10 分钟。

hot3.png

FitWidth ImageView: 宽度自适应

public class FitWidthImageView extends ImageView  {           public FitWidthImageView(Context context) {          super(context);          setup();      }           public FitWidthImageView(Context context, AttributeSet attrs) {          super(context, attrs);          setup();      }           public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);          setup();      }           @Override      protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {          int width = MeasureSpec.getSize(widthMeasureSpec);          int height = width * getDrawable().getIntrinsicHeight() / getDrawable().getIntrinsicWidth();          setMeasuredDimension(width, height);      }           private void setup() {          setScaleType(ScaleType.CENTER_CROP);      }    }

TopCrop ImageView : 从头部Crop而不是center

自己改名

public class FitWidthImageView extends ImageView  {           public FitWidthImageView(Context context) {          super(context);          setup();      }           public FitWidthImageView(Context context, AttributeSet attrs) {          super(context, attrs);          setup();      }           public FitWidthImageView(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);          setup();      }           private void setup() {          setScaleType(ScaleType.CENTER_CROP);          setScaleType(ScaleType.MATRIX);      }           @Override      protected boolean setFrame(int frameLeft, int frameTop, int frameRight, int frameBottom) {          float frameWidth = frameRight - frameLeft;          float frameHeight = frameBottom - frameTop;                   float originalImageWidth = (float) getDrawable().getIntrinsicWidth();          float originalImageHeight = (float) getDrawable().getIntrinsicHeight();                   float usedScaleFactor = 1;                   if ((frameWidth > originalImageWidth) || (frameHeight > originalImageHeight)) {              // If frame is bigger than image              // => Crop it, keep aspect ratio and position it at the bottom and center horizontally                           float fitHorizontallyScaleFactor = frameWidth / originalImageWidth;              float fitVerticallyScaleFactor = frameHeight / originalImageHeight;                           usedScaleFactor = Math.max(fitHorizontallyScaleFactor, fitVerticallyScaleFactor);          }                   float newImageWidth = originalImageWidth * usedScaleFactor;          float newImageHeight = originalImageHeight * usedScaleFactor;                   Matrix matrix = getImageMatrix();          matrix.setScale(usedScaleFactor, usedScaleFactor, 0, 0); // Replaces the old matrix completly          // matrix.postTranslate((frameWidth - newImageWidth) / 2, frameHeight - newImageHeight);//BottomCrop          matrix.postTranslate((frameWidth - newImageWidth) / 2, 0);//Top Crop          setImageMatrix(matrix);          return super.setFrame(frameLeft, frameTop, frameRight, frameBottom);      }  }

转载于:https://my.oschina.net/sfshine/blog/465161

你可能感兴趣的文章
费用分摊问题
查看>>
微信小程序把玩(二十三)modal组件
查看>>
第一次使用Android Studio时你应该知道的一切配置
查看>>
MySQL · 引擎特性 · DROP TABLE之binlog解析
查看>>
如何对webbrowser和IE编程(十一)
查看>>
mysql relay_log_recovery relay_log_info_repository
查看>>
【直击2017杭州·云栖大会】TECH INSIGHT企业迁云实战专场
查看>>
[干货]作为大数据入门者,你不得不知道的2017杭州云栖大会
查看>>
2017易观OLAP算法大赛
查看>>
PYTHON设计模式,创建型之简单工厂模式
查看>>
认识ASP.NET MVC的5种AuthorizationFilter
查看>>
递归sql的功率到达MySQL和MariaDB
查看>>
实用 | 从Apache Kafka到Apache Spark安全读取数据
查看>>
Oracle常用语句语法汇总
查看>>
保证系统性质相符 首推模型检验技术
查看>>
C++ 大端小端
查看>>
[WCF-Discovery]让服务自动发送上/下线通知[实例篇]
查看>>
ios编码规范(by raywenderlich团队,靠谱)
查看>>
Firefox 23.0新版浏览器的变化比较大,你如果经常捣鼓firefox的选项卡的人可能已经发现了,选项卡很多地方多有所改变。...
查看>>
【高质量代码】如何写出更高质量的C/C++代码(1):内存管理
查看>>