Java Android翻译与规模的关系

Java Android翻译与规模的关系,java,android,Java,Android,我有两种布局。一个(A)在其内容上有一个活动的ScaleGetureDetector来处理PinchZoom功能,而另一个(B)动态添加了称为标记的图像视图。B完全位于A的顶部,具有镜像的对齐方式和大小 当用户放大a时,我希望B上的标记以一种方式进行转换,即它们保持固定在相对于a的点上。例如,如果用户将标记放置在a上的兴趣点(POI)上,并放大到不同的点,则标记应保持固定在POI上 目前,我正在为每个ScaleGestureDetector实例/操作/运行使用以下代码: float[]

我有两种布局。一个(A)在其内容上有一个活动的ScaleGetureDetector来处理PinchZoom功能,而另一个(B)动态添加了称为标记的图像视图。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));
    }
float[]值=新的float[9];
trans.getValues(值);
float transx=值[Matrix.MTRANS_X];
float transy=值[Matrix.MTRANS_Y];
float scalex=值[Matrix.MSCALE_X];
float scaley=值[Matrix.MSCALE_Y];
float scale=(float)Math.sqrt(scalex*scalex+scaley*scaley);
focusX=transx-focusX;
focusY=transy-focusY;
transx=焦点x;
transy=焦点y;
float-markerX=marker.getX();
float-markerY=marker.getY();
if(markerX>startPoint.x){
marker.setTranslationX((-transx/scale)+(-transx%scale));
}else if(markerXstartPoint.y){
标记设置平移((-transy/scale)+(-transy%scale));
}else if(markerY
其中,
trans
是用于对A的内容执行后期缩放的矩阵,
focusX
focusY
仅用于防止翻译值的累积累积累积
startPoint
是在MotionEvent.ACTION\u DOWN案例中定义的第一个接触点

我的问题是,当用户放大到离标记更远的地方时,翻译会逐渐变得“混乱”。更大的缩放手势也会导致标记从其指定点浮动。为清晰起见,它们会更靠近缩放点并远离POI


我怀疑代码段底部的翻译量缺少一些东西,可能与版面大小有关。

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

  • 在移动开始时找到标记位置
  • 找到数学公式,以正确识别标记在移动过程中任何点的位置
  • 使用
    setX
    setY
    将其直接设置到该点

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

    如果我是你,我将采用以下方法:

  • 在移动开始时找到标记位置
  • 找到数学公式,以正确识别标记在移动过程中任何点的位置
  • 使用
    setX
    setY
    将其直接设置到该点
  • 这将避免可能出现的任何浮点不确定性。

    您好,帽子猎人伙伴!(或者我猜是这样)你好,帽子猎人!(我想大概是这样吧。)