gpt4 book ai didi

android - 重叠 fragment 和触摸事件

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:15 25 4
gpt4 key购买 nike

我有一个 ViewPager 和一个显示一组 fragment 的自定义 PagerAdapter

这些 fragment (有意)放置在彼此之上,这样我就可以使用 PageTransformer,使它看起来就像用户从堆栈中滑动 fragment (几乎像一副纸牌)。

问题是每个 fragment 都有自己的 Views/Widgets(例如搜索栏),由于重叠,它们占用相同的坐标,有时还占用触摸事件被当前 fragment 下方的 fragment 捕获(例如,用户调整了搜索栏的位置,但不是更新当前显示的搜索栏,而是更新其进度的下一个 fragment 中的搜索栏)。

我遇到了 this answer但这不是同一个问题。有没有人发现过类似的问题?处理这个问题的最聪明的方法是什么(懒惰的解决方案除外:将 PageTransformer 更改为不与 fragment 重叠的方法)?

编辑:

在我的 Fragment 类中我有:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)        
{
View rootView = inflater.inflate(R.layout.fragment, container, false);

rootView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
return true;
}
});
}

如 Zsombor Erdődy-Nagy 所建议的那样,但这并没有帮助:当前 fragment 下面的小部件仍然有可能接收事件而不是当前 fragment 。

我也看过 this open issue , 没有成功。

最佳答案

如果您仍在寻找解决方案,那么您应该看看这个:

Issue 58918 .

在这里您可以找到问题的答案。从链接引用:

If I remember right it was after 4.1 that the framework respects a custom child drawing order as implied Z-ordering for dispatching touch events. If your views overlap after this page transformation they may not receive touch events in the expected order on older platform versions. Check which view is receiving the touch events to be certain.

If this is what you are seeing you have a few options:

  • Enforce the desired ordering as you add/remove child views in your PagerAdapter
  • Remove the X translation applied by the PageTransformer when a page is no longer fully visible - i.e. the "position" parameter reports a full -1 or 1.

示例:

this.viewPager.setPageTransformer(true, new PageTransformer() {

@Override
public void transformPage(View page, float position) {
float translationX;
float scale;
float alpha;

if (position >= 1 || position <= -1) {
// Fix for https://code.google.com/p/android/issues/detail?id=58918
translationX = 0;
scale = 1;
alpha = 1;
} else if (position >= 0) {
translationX = -page.getWidth() * position;
scale = -0.2f * position + 1;
alpha = Math.max(1 - position, 0);
} else {
translationX = 0.5f * page.getWidth() * position;
scale = 1.0f;
alpha = Math.max(0.1f * position + 1, 0);
}

ViewHelper.setTranslationX(page, translationX);
ViewHelper.setScaleX(page, scale);
ViewHelper.setScaleY(page, scale);
ViewHelper.setAlpha(page, alpha);
}
});

关于android - 重叠 fragment 和触摸事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492564/

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