android 图片双击放大倍数的算法

图片双击放大倍数和图片大小、显示图片的view大小。及图片当前的scale大小均有关系。
为了避免图片放大过大。设置了一个放大倍数的最大限制SCALE_LIMIT,眼下该值为4.
 
详细算法例如以下所看到的:
图片的宽和高分别记为:imageW imageH
显示图片的view宽和高分别记为:viewW viewH
几个重要的比例记为:
scale_1 = viewW / imageW
scale_2 = viewH / imageH
scale_3 = viewW / imageH
scale_4 = viewH / imageW
 
假设当前图片的宽高比>2或者<0.5,则依照例如以下算法计算放大倍数zoomRate:
(1)当前scale = min(scale_1, scale_2)。
(2)zoomRate = min(max(scale_1, scale_2), max(scale_3, scale_4));
(3)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;
(4)假设scale >= zoomRate,则保留(1)的结果从第(2)步又一次计算zoomRate值,否则跳至(6)
     zoomRate = max(max(scale_1, scale_2), max(scale_3, scale_4));
(5)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;
(6)此时zoomRate值即是图片应该放大的倍数。


 
假设当前图片的宽高比<=2或者>=0.5,则依照例如以下算法计算放大倍数zoomRate:
(1)当前scale = min(scale_1, scale_2)。
(2)largerInitRate = max(min(scale_1, scale_2), min(scale_3, scale_4));
(3)假设largerInitRate > SCALE_LIMIT,则largerInitRate = SCALE_LIMIT;
(4)zoomRate = min(scale_2, largerInitRate * 2.0f);
(5)假设zoomRate > SCALE_LIMIT。则zoomRate = SCALE_LIMIT;
(6)假设scale >= zoomRate,则保留前3步的结果,从第(4)步又一次计算zoomRate值,否则跳至(8)
     zoomRate = largerInitRate * 2.0f;
(7)假设zoomRate > SCALE_LIMIT,则zoomRate = SCALE_LIMIT;
(8)此时zoomRate值即是图片应该放大的倍数。

转载于:https://www.cnblogs.com/ljbguanli/p/6920014.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Studio中双击放大图片需要使用ImageView组件,并且为其设置点击事件监听器。在该监听器中,通过获取ImageView的当前大小并计算新的放大比例,将放大后的图片设置给ImageView即可实现双击放大图片的功能。 首先,在布局文件中添加一个ImageView组件,并设置其布局参数和初始图片资源: ```xml <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/image" android:scaleType="center"/> ``` 接下来,在Activity中获取ImageView并设置双击事件监听器: ```java ImageView imageView = findViewById(R.id.imageView); imageView.setOnClickListener(new View.OnClickListener() { private long lastClickTime = 0; @Override public void onClick(View v) { long currentTime = System.currentTimeMillis(); if (currentTime - lastClickTime < 300) { // 判断两次点击的时间间隔是否小于300ms zoomImage((ImageView) v); } lastClickTime = currentTime; } }); // 放大图片的方法 private void zoomImage(ImageView imageView) { // 获取ImageView的当前大小 int width = imageView.getWidth(); int height = imageView.getHeight(); // 计算新的放大比例 float scale = 1.5f; // 可根据实际需求调整放大倍数 int newWidth = (int) (width * scale); int newHeight = (int) (height * scale); // 设置放大后的图片给ImageView imageView.setLayoutParams(new LinearLayout.LayoutParams(newWidth, newHeight)); } ``` 在双击事件监听器中,通过判断两次点击的时间间隔是否小于300毫秒来确定是否触发双击放大图片的操作。若满足条件,则调用zoomImage方法进行放大操作。zoomImage方法中通过获取ImageView的当前大小,并计算新的放大比例,最后将放大后的图片设置给ImageView,从而实现双击放大图片的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值