我正在使用ViewPager
和FragmentStatePagerAdapter
来显示片段列表Group A
,这样我就可以通过触摸在片段之间滑动。来自Group A
的每个片段都包含一个内部片段Group B
。
在Group B
的一个片段中,有一个Chart
对象,可以启用水平滚动,与触摸侦听器进行拦截。
当用户尝试滚动Group A
对象中的数据时,我无法想象如何避免ViewPager
scorlling(Chart
滑动)。
如图所示:
Chart
涂成灰色。Group A
是2个片段:白色和绿色(在滑动时间拍摄的照片)Group B
红色内部片段。有什么建议吗? 谢谢。
答案 0 :(得分:2)
当用户触摸您的图表时,您可以禁用视图寻呼机的滑动功能,并在用户停止触摸您的图表时将其恢复。首先定义Non-Swipable ViewPager
并使您的视图寻呼机NonSwipable。
public class NonSwipableViewPager extends ViewPager {
private boolean canScroll = true;
public NonSwipableViewPager(Context context) {
super(context);
}
public NonSwipableViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setCanScroll(boolean canScroll) {
this.canScroll = canScroll;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
return canScroll && super.onTouchEvent(ev);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return canScroll && super.onInterceptTouchEvent(ev);
}
public boolean isCanScroll() {
return canScroll;
}
}
将其保存在公共变量中。 (在活动中保留公共变量可能不是最好的做法。)
在图表中添加触控侦听器,并禁用视图寻呼机的滑动功能,如下所示:
View yourChart = (YourChart) view.findViewById(R.id.your_chart);
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
if (activity.mainViewPager != null) {
activity.mainViewPager.setCanScroll(false);
}
break;
case MotionEvent.ACTION_UP:
if (activity.mainViewPager != null) {
activity.mainViewPager.setCanScroll(true);
}
break;
}
return false;
}
});