Matrix实现缩放拖动图片操作

前言

最近在学习视频的时候看到大神讲解如何缩放和拖动图片,没想到平时很常见的一个功能真的实现起来还是挺麻烦的,这里就记录一下自定义控件实现缩放拖动图片的实现过程。

实现结果

这里写图片描述

缩放实现

首先需要把图片加载到屏幕上去,控件的大小正好是屏幕的宽高,而图片则是随机大小的,最开始的时候希望图片能够等比缩放并居中展示,这样就需要考虑四种情况。
第一种情况:
这里写图片描述
首先将其中心点移动到屏幕中心点,再把宽高里缩放较小的放到和屏幕一样大,另外一边按照等比进行缩放。

第二种情况:
这里写图片描述
将中心点移动到屏幕中心,再将宽高所方法较小的缩小到和屏幕一样大,另外一边按照等比缩放,可以看出来第一种和第二种其实是同一种情况。

第三种情况:
这里写图片描述
将中心点移动到屏幕中心,再把高度拉伸到屏幕高度,宽度等比拉伸。

第四种情况:
这里写图片描述
将中心点移动到屏幕中心,再把宽度拉伸到屏幕宽度,高度等比拉伸。

分析完了前面四种情况,这种等比缩放并居中展示就可以放在第一次展示的时候处理,实现代码如下:

@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
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值