[英]Android: parent Viewgroup ontouch being ignored in favour of child view onclick
我敢肯定,我找不到100%合適的解決方案,但是無論如何,我打算問這個問題,因為這樣做讓我頭疼。
由於各種原因,我有一個Scrollview(A)包含一個FrameLayout(B),它具有一個RelativeLayout(C)包含一個Viewgroup(D),后者又充當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;
Viewgroup的代碼:
_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並在那里檢測手勢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.