前言
最近在学习视频的时候看到大神讲解如何缩放和拖动图片,没想到平时很常见的一个功能真的实现起来还是挺麻烦的,这里就记录一下自定义控件实现缩放拖动图片的实现过程。
实现结果
缩放实现
首先需要把图片加载到屏幕上去,控件的大小正好是屏幕的宽高,而图片则是随机大小的,最开始的时候希望图片能够等比缩放并居中展示,这样就需要考虑四种情况。
第一种情况:
首先将其中心点移动到屏幕中心点,再把宽高里缩放较小的放到和屏幕一样大,另外一边按照等比进行缩放。
第二种情况:
将中心点移动到屏幕中心,再将宽高所方法较小的缩小到和屏幕一样大,另外一边按照等比缩放,可以看出来第一种和第二种其实是同一种情况。
第三种情况:
将中心点移动到屏幕中心,再把高度拉伸到屏幕高度,宽度等比拉伸。
第四种情况:
将中心点移动到屏幕中心,再把宽度拉伸到屏幕宽度,高度等比拉伸。
分析完了前面四种情况,这种等比缩放并居中展示就可以放在第一次展示的时候处理,实现代码如下:
@Override
public void onGlobalLayout() {
Log.d(TAG, "onGlobalLayout");
if (mIsFirstInit) {
int originWidth = bitmapDrawable.getIntrinsicWidth();
int originHeight = bitmapDrawable.getIntrinsicHeight();
int viewWidth = getWidth();
int viewHeight = getHeight();
float scale = 0;
// 第一二种情况
if (originWidth > viewWidth && originHeight > viewHeight ||
originWidth < viewWidth && originHeight < viewHeight) {
scale = Math.min((float) viewWidth / originWidth, (float) viewHeight / originHeight);
} else if (originWidt