一个BUG调一天之图片放大镜

在这里插入图片描述

前言

  1. 如上图,在跟《启舰_自定义控件》学习到第10章时,遇到一个功能出现问题;出现这个问题我很懵圈,花了 6 个小时调BUG,总结出血泪教训:脑子是个好东西啊!
  2. 书中代码把放大倍率,以及放大镜半径写死了;我觉得不必如此,非要加上 SeeBbar,随后多花了6个小时……

原因

  1. 还是先看源码,源码在我的博客:小动画之图片🔍(ShapeDrawable)
  2. 出现BUG的表现在于:手指按下之后,放大的位置不是手指按压的位置;进行了如下分析:
    1. 手指按下,应该是 onTouchEvent 事件中处理过程中,mMatrix.setTranslate 函数导致的,我一度怀疑,书中给的代码不正确,经过在网上调研其他方法,好吧……这是对的;mMatrix.setTranslate(radius - factor * x, radius - factor * y);
    2. 是不是 SeeBbar 参数传递的问题?我甚至怀疑自己对 static 和 final 的理解;因为这是从 activity 向自定义 View 传递数据,一开始使用静态成员的方法,后来通过 在自定义 VIew 中定义 set 方法,在 activity 中实例化 View 调用其 set 方法;进行传递;
    3. 我后来在想,这个方法是不是,必须让放大半径和放大倍率设置为静态常量?否则就会计算错误?我的脑子真是会给自己加戏
    4. 最后知道真相的我眼泪掉下来……

方法

  1. 其实都不是,触摸事件中,mMatrix 的平移是对的;
  2. SeeBbar 的参数传递也不是根本原因;
  3. 并不是必须设置为静态常量;
  4. 而是自定义 View 的 onDraw 方法中,对放大镜 BitmapShader 的初始化只进行了一次,要注意;这个初始化的放大镜其实就是一个可以放大的一个 BitmapShader,而放大的参数是个放大镜的放大倍率有直接关系,也就是说!每次通过 SeeBbar 更新放大倍率后都要重更新创建 BitmapShader

感慨

  1. 自己根本就没有明白动画的含义,每一句,每一个变量代表什么意思!虽然有收获,但我觉得得不偿失,最根本的原因是学习不仔细!
  2. 一味的求结果,出现问题,不是找原因,而是找那里抄错了,不是看逻辑原理而是看结果现象;实在是个笨人!
  3. 出现问题一定要究其原因,不能只顾结果和现象!不然只会治标不治本!要动脑!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liusaisaiV1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值