为了账号安全,请及时绑定邮箱和手机立即绑定

Android MPAndroidChart LineChart 如何完全忽略 ViewPager

Android MPAndroidChart LineChart 如何完全忽略 ViewPager

杨魅力 2023-03-02 10:04:16
我试图让 mpandroidchart 中的折线图忽略 fragmentviewpager,并且在触摸视图时只移动折线图而不移动 viewpager。我的问题是如何存档?我找到了这个解决方案,但不知道如何实施,也许你们可以帮助我了解如何实施它? https://github.com/PhilJay/MPAndroidChart/issues/1885#issuecomment-267568663公共类 PagerAdapter 扩展 FragmentStatePagerAdapter {int mNumberOfTabs;public PagerAdapter(FragmentManager fm, int NumberOfTabs) {    super(fm);    this.mNumberOfTabs = NumberOfTabs;}@Overridepublic 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;    }}@Overridepublic int getCount() {    return mNumberOfTabs;}}
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

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


更新@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 替换默认 viewpager


查看完整回答
反对 回复 2023-03-02
?
阿晨1998

TA贡献2037条经验 获得超6个赞

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

chart.setTouchEnabled(true);


查看完整回答
反对 回复 2023-03-02
  • 2 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号