Android MPAndroidChart LineChart如何完全忽略ViewPager触摸手势?

Android MPAndroidChart LineChart how to Ignore ViewPager touch gestures completely?

我试图让 mpandroidchart 中的折线图忽略 fragmentviewpager,并且在触摸视图时只移动折线图而不移动 viewpager。我的问题是如何存档?

我找到了这个解决方案,但不知道如何实施它也许你们可以帮助我了解如何实施它? https://github.com/PhilJay/MPAndroidChart/issues/1885#issuecomment-267568663

public class PagerAdapter 扩展了 FragmentStatePagerAdapter {

int mNumberOfTabs;

public PagerAdapter(FragmentManager fm, int NumberOfTabs) {
    super(fm);
    this.mNumberOfTabs = NumberOfTabs;
}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:
            IncomeOutcomeOverviewFragment incomeOutcomeOverviewFragment = new IncomeOutcomeOverviewFragment();
            return incomeOutcomeOverviewFragment;
        case 1:
            IncomeFragment incomeFragment = new IncomeFragment();
            return incomeFragment;
        case 2:
            OutcomeFragment outcomeFragment = new OutcomeFragment();
            return outcomeFragment;
        default:
            return null;
    }
}



@Override
public int getCount() {
    return mNumberOfTabs;
}

}

您需要为您的图表禁用触摸,您可以使用此代码,

chart.setTouchEnabled(true);

我认为你想要的不是可滑动的视图寻呼机,因为你必须像这样创建自定义视图寻呼机

UPDATE @anomynous

建议的更改
 public class NonSwipeableViewPager extends ViewPager {

        boolean enabled = false;

        public NonSwipeableViewPager(Context context) {
            super(context);
            setMyScroller();
        }

        public NonSwipeableViewPager(Context context, AttributeSet attrs) {
            super(context, attrs);
            setMyScroller();
        }

        @Override

        public boolean onInterceptTouchEvent(MotionEvent event) {
            if (this.enabled) {
                return false;
            }
            return super.onInterceptTouchEvent(event);

        }

        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            if (this.enabled) {
                return false;
            }
            return super.onTouchEvent(event);

        }

        //down one is added for smooth scrolling

        private void setMyScroller() {
            try {
                Class<?> viewpager = ViewPager.class;
                Field scroller = viewpager.getDeclaredField("mScroller");
                scroller.setAccessible(true);
                scroller.set(this, new MyScroller(getContext()));
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public class MyScroller extends Scroller {
            public MyScroller(Context context) {
                super(context, new DecelerateInterpolator());
            }

            @Override
            public void startScroll(int startX, int startY, int dx, int dy, int duration) {
                super.startScroll(startX, startY, dx, dy, 350 /*1 secs*/);
            }
        }

        public void setPagingDisabled(boolean enabled) {
            this.enabled = enabled;
        }
    }

Then on my linechart I used onChartGestureStart and onChartGestureEnd to enable or disable the pageview:

    @Override
        public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
            nonSwipeableViewPager.setPagingDisabled(true);
        }

        @Override
        public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
            nonSwipeableViewPager.setPagingDisabled(false);
        }

在 xml

中将默认的 viewpager 替换为自定义的