您的位置:首页 > 移动开发 > Android开发

MPAndroidChart在ViewPager+Fragment滑动冲突解决

2016-12-27 15:19 633 查看
本文出自:http://blog.csdn.net/dt235201314/article/details/53894944

MPAndroidChart常见设置属性(一)——应用层 

MPAndroidChart项目实战(一)——实现对比性柱状图 

MPAndroidChart项目实战(二)——双平滑曲线(双折线图)和MarkView实现 

MPAndroidChart项目实战(三)——饼状图实现和文字重合问题解决 

MPAndroidChart项目实战(四)——柱状图实现及X轴文字不显示问题和柱状图上显示文字 


一丶慨述

这个问题在禅道上本来是交给我处理,拖了一天没解决,转交给做给的同事了,做折中处理(滑动MPChart时禁止外部滑动)

二丶直接上代码

方法一:

/**
* 设置左右滑动
*
* @param barChart
*/
public static void setChartScaleX(LineChart barChart) {
if (barChart != null) {
float scaleX = barChart.getScaleX();
if (scaleX <= 1.0f) { //可以左右滑动
ChartAllFragment.setViewPageScrollEnable(true);
} else {
ChartAllFragment.setViewPageScrollEnable(false);
}
} else {
ChartAllFragment.setViewPageScrollEnable(true);
}
}

/**
* 设置上下滑动
*
* @param scrollView
* @param lineChart
*/
public static void setScrollViewScrolling(ScrollView scrollView, LineChart lineChart) {
if (lineChart != null) {
float scaleY = lineChart.getScaleY();
if (scaleY <= 1.0f) { //可以左右滑动
if (scrollView != null) scrollView.setEnabled(true);
} else {
if (scrollView != null) scrollView.setEnabled(false);
}
} else {
if (scrollView != null) scrollView.setEnabled(true);
}
}


这里页面上下滑动用的都是ScrollView

代码思路:scaleX和scaleY是图标是否放大(1f为正常),左右滑动MpChart时关闭fragment左右滑动,执行MpChart的,上下滑动时则关闭MpChart的打开ScrollView的

最后监听里调用方法:

linechart.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean isScaled = linechart.getScaleX() != 1.0 && linechart.getScaleY() != 1.0;
if (event.getAction() == MotionEvent.ACTION_DOWN) {
setChartScaleX(linechart);
setScrollViewScrolling(scrollView, linechart);
linechart.getParent().requestDisallowInterceptTouchEvent(isScaled);
return false;
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
return false;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
ChartAllFragment.setViewPageScrollEnable(true);
scrollView.setEnabled(true);
return false;
} else {
return false;
}
}
});


到达效果:MPchart能左右滑动时,fragment不滑动

方法二:

使用改装集成后的LintChart

public class LineChartInViewPager extends LineChart {

PointF downPoint = new PointF();

public LineChartInViewPager(Context context) {
super(context);
}

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

public LineChartInViewPager(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent evt) {
switch (evt.getAction()) {
case MotionEvent.ACTION_DOWN:
downPoint.x = evt.getX();
downPoint.y = evt.getY();
break;
case MotionEvent.ACTION_MOVE:
LogUtils.i("getScrollX ", getScrollX() + "" );
if (getScaleX() > 1 && Math.abs(evt.getX() - downPoint.x) > 5) {
getParent().requestDisallowInterceptTouchEvent(true);
}
break;
}
return super.onTouchEvent(evt);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐