gpt4 book ai didi

java - Android 翻译与比例的关系

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:47 25 4
gpt4 key购买 nike

我有两种布局。一个 (A) 在其内容上激活了 ScaleGestureDetector 以处理 PinchZoom 功能,而另一个 (B) 则动态添加了称为标记的 ImageView。 B 完美地位于 A 之上,并具有镜像对齐和尺寸。

当用户放大 A 时,我希望 B 上的标记以保持固定在相对于 A 的点上的方式进行平移。例如,如果用户将标记放置在 A 上的兴趣点 (POI) 上,然后放大到不同的点,则标记应保持固定在 POI 上。

目前,我对每个 ScaleGestureDetector 实例/操作/运行使用以下代码:

    float[] values = new float[9];
trans.getValues(values);
float transx = values[Matrix.MTRANS_X];
float transy = values[Matrix.MTRANS_Y];
float scalex = values[Matrix.MSCALE_X];
float scaley = values[Matrix.MSCALE_Y];
float scale = (float) Math.sqrt(scalex * scalex + scaley * scaley);
focusX = transx - focusX;
focusY = transy - focusY;
transx = focusX;
transy = focusY;
float markerX = marker.getX();
float markerY = marker.getY();

if(markerX > startPoint.x) {
marker.setTranslationX((-transx/scale) + (-transx%scale));
}else if(markerX < startPoint.x) {
marker.setTranslationX((transx/scale) + (transx%scale));
}
if(markerY > startPoint.y) {
marker.setTranslationY((-transy/scale) + (-transy%scale));
}else if(markerY < startPoint.y) {
marker.setTranslationY((transy/scale) + (transy%scale));
}

其中 trans 是用于对 A 的内容执行 postScales 的矩阵,而 focusXfocusY 仅用于防止平移值的累积累积。 startPoint 是第一次接触的点,在 MotionEvent.ACTION_DOWN 情况下定义。

我的问题是,当用户放大到远离标记时,翻译会逐渐变得“精神错乱”。较大的缩放手势还会导致标记远离其指定点。为了清楚起见,它们靠近缩放点并远离 POI。

我怀疑代码段底部的翻译量缺少某些内容,可能与布局的大小有关。

最佳答案

如果我是你,我会采取以下方法:

  1. 找到运动开始时的标记位置。
  2. 找到数学公式,以正确识别标记在运动过程中任意点的位置。
  3. 使用 setXsetY 将其直接设置为该点。

这将避免可能出现的任何浮点不确定性。

关于java - Android 翻译与比例的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34169718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com