Android MPAndroidChart LineChart как полностью игнорировать сенсорные жесты ViewPager? - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь заставить линейную диаграмму из mpandroidchart игнорировать фрагмент-просмотрщик и перемещать только линейную диаграмму, а не просмотрщик при касании вида.У меня вопрос, как мне это заархивировать?

Я нашел это решение, но не знаю, как его реализовать Может, вы, ребята, можете помочь мне понять, как его реализовать?https://github.com/PhilJay/MPAndroidChart/issues/1885#issuecomment-267568663

открытый класс 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;
}

}

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Я думаю, что вам нужен ни перелистываемый видовой пейджер, для этого вам нужно создать пользовательский пейджер вида, подобный этому

ОБНОВЛЕНИЕ изменения, предложенные @ 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

0 голосов
/ 01 июля 2019

Вам нужно отключить сенсорный для вашего графика, вы можете использовать этот код,

chart.setTouchEnabled(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...