ScaleGestureDetector 在两指距离较短时,不能缩放

2024-02-02 05:44

本文主要是介绍ScaleGestureDetector 在两指距离较短时,不能缩放,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来源

ScaleGestureDetector 在两指距离较短时,不能缩放

一、问题分析

调试了发现,当手指距离很短的时候detector.getScaleFactor() 等于 1,基本不动,那肯定不会缩放了。

没办法只能去到 ScaleGestureDetector 的源码,发现如果要回调 onScale(ScaleGestureDetector detector) ,则它的条件如下:

if (action == MotionEvent.ACTION_MOVE) {
.... 
if (mInProgress) {updatePrev = mListener.onScale(this);
}

首先,mInProgress 第一次赋值在 onScaleBegin() 方法中,这也是为什么要返回true 的原因。

mInProgress = mListener.onScaleBegin(this);

接着找到 mInProgress 被赋值为 false 的地方,比如:

if (!inAnchoredScaleMode() && mInProgress && (span < mMinSpan || configChanged)) {mListener.onScaleEnd(this);mInProgress = false;mInitialSpan = span;
}

可以发现,罪魁祸首是 mMinSpan 这个参数,它的数值如下:

mMinSpan = res.getDimensionPixelSize(com.android.internal.R.dimen.config_minScalingSpan);

这个可以在 framework 的 res 中找到值,不同版本值不同。

二、解决方法

如果你能源码开发,直接改这个值即可。但这个对一般人来说都比较麻烦,但咱们可以复制 ScaleGestureDetector 这个类的源码,直接复制 mMinSpan。但这样并不现实,所以这里用反射的方法:

ScaleGestureDetector mScaleGesture = new ScaleGestureDetector(context, new ScaleListener());//设置 mMinSpan ,防止不能缩小
try {Field field = mScaleGesture.getClass().getDeclaredField("mMinSpan");field.setAccessible(true);field.set(mScaleGesture,1);
} catch (Exception e) {e.printStackTrace();
}

这样就可以啦。

这篇关于ScaleGestureDetector 在两指距离较短时,不能缩放的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/669642

相关文章

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

线性代数|机器学习-P35距离矩阵和普鲁克问题

文章目录 1. 距离矩阵2. 正交普鲁克问题3. 实例说明 1. 距离矩阵 假设有三个点 x 1 , x 2 , x 3 x_1,x_2,x_3 x1​,x2​,x3​,三个点距离如下: ∣ ∣ x 1 − x 2 ∣ ∣ 2 = 1 , ∣ ∣ x 2 − x 3 ∣ ∣ 2 = 1 , ∣ ∣ x 1 − x 3 ∣ ∣ 2 = 6 \begin{equation} ||x

为什么构造函数不能为虚函数

1,从存储空间角度     虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。 2,从使用角度         虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调

模拟退火求n个点到某点距离和最短

/*找出一个点使得这个店到n个点的最长距离最短,即求最小覆盖圆的半径用一个点往各个方向扩展,如果结果更优,则继续以当前步长扩展,否则缩小步长*/#include<stdio.h>#include<math.h>#include<string.h>const double pi = acos(-1.0);struct point {double x,y;}p[1010];int

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

mysql可重复读不能解决幻读吗?

1、可重复读和幻读的概念 1.1、可重复读        可重复读是数据库的四个隔离级别之一,可重复读可以保证在一个事物之内读取到的数据永远是相同的(通过mvcc表快照实现的),哪怕这期间有其它事务对数据做了修改,也不会影响当前事务的查询。 1.2、幻读       网上有不少博客说:幻读是一个事物内多次查询得到的数据结果不一样。比如说select (1)这种查询,如果有其它事务增加或删除

SimD:基于相似度距离的小目标检测标签分配

摘要 https://arxiv.org/pdf/2407.02394 由于物体尺寸有限且信息不足,小物体检测正成为计算机视觉领域最具挑战性的任务之一。标签分配策略是影响物体检测精度的关键因素。尽管已经存在一些针对小物体的有效标签分配策略,但大多数策略都集中在降低对边界框的敏感性以增加正样本数量上,并且需要设置一些固定的超参数。然而,更多的正样本并不一定会带来更好的检测结果,事实上,过多的正样本

ExtMvc store不能通过xtype选择器得到的办法

store 不能通过xtype选择器得到,  init : function() {         this.control({                 'smsmenu gridpanel[name='company'] : {                                         render:function(grid,opts){

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS