Android:父 View 组 ontouch 被忽略以支持 subview onclick

标签 android onclick viewgroup

我很确定我找不到 100% 合适的解决方案,但我还是打算问这个问题,因为它让我很头疼,试图弄明白。

由于各种原因,我有一个包含 FrameLayout (B) 的 Scrollview (A),它有一个包含 Viewgroup (D) 的 RelativeLayout (C),后者又充当 Viewpager 并包含 ImageView (E) 子级。

这样做的目的是创建一个可以垂直滚动的布局(感谢 (A))并允许 (B) 用作图像轮播。

问题是,如果我在 Imageview 上有一个简单的 onclick 监听器,然后使用 API 9 和 10 设备,onclick 监听器会覆盖我编码到 Viewgroup 中的 ontouch 事件。结果,我无法再滑动轮播,每次触摸轮播时都会调用 onclick 事件。

我希望有人能够帮助我解决这个问题。

子图像项代码:

final FrameLayout container = new FrameLayout(_context);
        container.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
        if(dataList.size() > 0)
        {
            ImageView iv = new ImageView(_context);
            FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
            lp.gravity = Gravity.CENTER;
            iv.setLayoutParams(lp);
            iv.setScaleType(ScaleType.FIT_START);
            iv.setAdjustViewBounds(true);
            container.addView(iv, 0);

            String url = dataList.get(position).getImageUrl();
            if(url != null)
            {
                UrlImageViewHelper.setUrlDrawable(iv, url, R.drawable.placeholder);
            }
            iv.setOnClickListener(new OnClickListener()
            {
                @Override
                public void onClick(View v)
                {
                    Log.e("seiji", "v: "+v);
                }
            });

        }
        ((EndlessCarousel) collection).addView(container, 0);
        return container;

View 组代码:

_galleryCarousel = (EndlessCarousel) convertView.findViewById(getEndlessCarouselID());
        ArrayList<ImagesObject> gallerydata = _currentComponent.getImageData();
        if(_galleryAdapter == null)
        {
            _galleryAdapter = new GalleryComponentAdapter(_context, gallerydata);               
        }
        else
        {
            _galleryAdapter.setArray(gallerydata);
            _galleryAdapter.notifyDataSetChanged();
        }
        _galleryCarousel.setAdapter(_galleryAdapter);

        if(_slideshowDelay != -1)
        {
            slideShowHandler.removeCallbacks(runSlideshow);
            slideShowHandler.postDelayed(runSlideshow, _slideshowDelay);
        }

        _galleryCarousel.setOnPageChangeListener(new OnPageChangeListener()
        {
            @Override
            public void onPageSelected(int position)
            {
                _tsi.setIndex(position);
                _carouselCtn = position;
                if(_slideshowDelay != -1)
                {
                    slideShowHandler.removeCallbacks(runSlideshow);
                    slideShowHandler.postDelayed(runSlideshow, _slideshowDelay);
                }
            }

            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
            {

            }

            @Override
            public void onPageScrollStateChanged(int state)
            {

            }
        });

        _tsi = (GalleryIndicator) convertView.findViewById(getEndlessCarouselIndicatorID());
        _tsi.removeAllViews();
        _tsi.setUp(gallerydata.size(), _context);

我感谢任何能提前给我一些帮助的人。

最佳答案

覆盖自定义 ViewGroup 中的 onInterceptTouchEvent 并在那里检测手势

关于Android:父 View 组 ontouch 被忽略以支持 subview onclick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17339548/

相关文章:

java - 从 InputStream 读取数据包 - 正确的设计

css - 使用 onclick 更改 div 中的价格

java - Android stackoverflow 错误寻呼机适配器

java - 如何从 View 构造函数设置 layout_width/height

android - Android 标签分发器是同步处理还是异步处理 NDEF 记录?

android - 如何清除android缓存onCreate

java - 将 JSON 字符串分隔为 android 中的变量

javascript - 无法找出我的代码有什么问题,Javascript/html/css

Javascript Onclick 滚动和突出显示示例

android - 删除 View 不工作