我有两个活动,其中一个显示RecyclerView,另一个显示图像。单击RecyclerView中的项目将显示第二个活动,其中包含与所单击项目相关的小图像,并且背景为透明,显示第一个活动。
我试图让第二个Activity忽略图像范围之外的所有触摸事件,以便可以使用屏幕上的图像滚动列表。这可以通过
实现getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
但是,只有当第二个Activity的Window不占用整个屏幕时,这才有效。这是第二个活动布局的示例:
<?xml version="1.0" encoding="utf-8"?>
<CustomFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/transparent">
<ImageView
android:id="@+id/imageView_item"
android:layout_width="150dp"
android:layout_height="150dp"
android:background="@color/colorPrimary"
android:layout_gravity="center"/>
</CustomFrameLayout>
由于CustomFrameLayout的高度和宽度与父级相匹配,因此它会拦截ImageView中不存在的所有触摸事件。
我认为覆盖CustomFrameLayout中的onInterceptTouchEvent会允许我使用以下代码忽略不需要的触摸事件:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (/* Is touch event within bounds of ImageView */) {
return true;
}
return false; //Otherwise don't intercept
}
但这也不起作用,有没有人有其他想法?
让我们说FrameLayout需要全屏,我不能使用片段,这是可行的吗?
答案 0 :(得分:2)
你做不到。启动第二个Activity时,第一个Activity将暂停。暂停时,它不会处理任何触摸事件。执行此操作的正确方法是在第一个活动中将第二个活动设为片段。
即使你设法找到一种方法来强制它触摸事件,它也不一定像你希望的那样工作。编写良好的Activity会在调用onPaused时停止大量处理。它可能无法在之后正确处理触摸,并且可能会使其崩溃。