我正在尝试使mpandroidchart中的折线图忽略fragmentviewpager,并且仅在触摸视图时移动折线图,而不移动viewpager。我的问题是如何存档?
我找到了此解决方案,但不知道如何实施。Maybee,你们可以帮助我理解如何实施它吗? 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;
}
}
答案 0 :(得分:0)
您需要禁用图表的触摸,可以使用此代码,
chart.setTouchEnabled(true);
答案 1 :(得分:0)
我认为您想要的也不是可滑动视图的寻呼机,因此您必须创建这样的自定义视图寻呼机
由@anomynous建议的UPDATE 更改
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