为了账号安全,请及时绑定邮箱和手机立即绑定
讲得很好!
讲得很好!

最新回答 / MyBilly
压缩后的图片,其分辨率已经变小了,不再是原图片的分辨率,因此缩放也只是压缩后的分辨率上进行处理
谢谢,学到很多东西了,虽然算法有点绕脑自己多想想就好了!比起网上一搜一大把但又很并卵的博客好多了!笔芯
看不懂还怪人家讲的不好。有时间评论不如多写点代码。/摊手+滑稽
if (dWidth > width && dHeight < height) {
……
}
if (dWidth < width && dHeight > height) {
……
}
if ((dWidth > width && dHeight > height) || (dWidth < width && dHeight < height)) {
……
}
亲测,可以直接
scale = Math.min(width * 1.0f / dWidth, height * 1.0f / dHeight);
鸿洋大神!鸿洋大神!鸿洋大神!!!
我觉得会用matrix、ScaleGestureDetector就行了,业务逻辑因人而异 大家都能写出自己的逻辑 效率好坏而已 况且老师的也不见得是最好的 这种程度的逻辑完全不用听老师的;ps:个人发现onScale中return true阻止事件传递这个蛮有意思,若false检测为一次传递 scaleFactor的值变动很大(相对于手指初始点击比例);return true的原因就是阻止传递,ScaleGestureDetector的onscale认为事件多次执行,每次比例均为本次检测时的currentSpan 我觉得如果只要老师代码 绝对会忽略了这些内容(这个确实该讲啊)
关于rectF.set(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());的问题,我怀疑洋神是否真的清楚其中的本质。
d.getIntrinsicWidth()/height()的值只要图片不变,其结果永远不变。rectF.set()和mScaleMatrix.mapRect(rectF)会将图片现有的Matrix和IntrinsicWidth/height做一个映射计算,具体算法我说不清楚,数学不好。结果就是将图片以像素为单位的边界存放到RectF当中。这样才能做到图片的边界与空间宽高(以像素为单位)对应,从而正确计算。
这种算法是有问题的。应该先把图片的宽高比和控件的宽高比作比较,决定图片缩放是适应宽还是适应高,算出缩放比,把另一条边根据缩放比进行缩放,剧中就可以了。这样穷举很有问题。

已采纳回答 / 慕粉3914370
图片的信息存储在矩阵当中,对该矩阵运算,直接改变了图片的展示,可能其他封装的api也是对matrix的操作,要看源码,很重要
对于赞数高的zttbill同学的说法,老师的缩放不是倍数,是比例,你说的缩小2倍,在代码里是乘上0.5,不是除以2,所以说“选择小的比例”意思是选择比例值小的,那么相乘后当然就是更加缩小的
看完视频写的代码,以及应用Demo:http://blog.csdn.net/qasimcyrus/article/details/53109037
DEMO地址:https://github.com/QasimCyrus/ZoomImageView-Demo。
项目中的ZoomImageView就是自定义缩放ImageView。
matrix.postScale()方法是按照"已经缩放过的图片",再去进行一次缩放的。也就是之前如果已经调用了postScale(scale, scale),那么图片宽高就已经缩放了scale个系数,现在再次调用postScale(scaleFactor, scaleFactor),就会在scale系数的基础上缩放scaleFactor个系数,也就是缩放scale*scaleFactor。视频中166行和171行除以scale这个参数,就是为了将之前已经缩放过的scale个系数给抵消掉,最后得到最大或者最小缩放比例。
课程须知
本课程是基于Android开发的案例,需要大家对Android的了解要达到小成的境界: 1、掌握自定义控件的流程。 2、熟悉常用的控件以及API。 3、对手势检测相关API有一定的了解。
老师告诉你能学到什么?
1、Matrix的介绍与实战。 2、ScaleGestureDetector的介绍与实战。 3、GestureDetector的介绍与实战。 4、自定义控件中如何与用户交互。 5、自定义控件中如何实现友好的过渡效果。 6、与ViewPager结合使用时的冲突处理。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消