我有一个如下所示的布局:
<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>
“image”是全屏开始的。有一个onTouchListener设置为“图像”,它工作正常。然后我使用ScaleAnimation缩放“图像”(大约一半大小),我期望发生的是onTouchListener只会在触摸“图像”时才会拾取,但它仍然会触发整个屏幕并且getX获得相同的效果值为getRawX。
有没有办法检测我是否在onTouch的图像范围内?我想过根据比例值对边界进行硬编码,但肯定必须有更优雅的解决方案吗?
答案 0 :(得分:0)
首先,您可以在屏幕上找到图像的宽度和高度,如下所示:
widthOnScreen = origWidth * scaleFactor
heightOnScreen = origHeight * scaleFactor
正如您所说“图像是全屏开始的”,origWidth = viewWidth
,origHeight = 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()
是否在这些左,上,右和下界之内。