0

我有一个看起来像这样的布局:

<FrameLayout
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >
    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:scaleType="center"/>
</FrameLayout>

“图像”是全屏开始的。为“图像”设置了一个 onTouchListener,效果很好。然后我用 ScaleAnimation 缩放“图像”(大约一半大小),我期望发生的是 onTouchListener 只会在“图像”被触摸时拾取,但它仍然会在整个屏幕上触发并且 getX 得到相同作为 getRawX 的值。

有什么方法可以检测我是否在 onTouch 的图像范围内?我考虑过根据比例值对边界进行硬编码,但肯定有更优雅的解决方案吗?

4

1 回答 1

0

首先,您可以在屏幕上找到图像的宽度和高度,如下所示:

widthOnScreen = origWidth * scaleFactor
heightOnScreen = origHeight * scaleFactor

正如你所说的“图像是全屏开始” origWidth = viewWidthorigHeight = viewHeight并且 scaleFactor 是应用到图像上的总比例,直到最大/最小。

matrix.getvalues(val);

保持左、上、右、下:

left=val[2]; 
right=val[Matrix.MSCALE_X]*actualWidth+val[2]; //actualWidth is image's actual width
top=val[5];
bottom=vals[Matrix.MSCALE_Y]*actualHeight+val[5];

然后onTouch(),检查您的event.getX(),getY()是否在这些左、上、右和下边界内。

于 2013-01-02T06:23:10.037 回答