MPAndroidChart ViewPager + Fragment 에서 미끄럼 충돌 해결

10829 단어 BUG 매일 봐 요.
본문 은 다음 과 같다.http://blog.csdn.net/dt235201314/article/details/53894944
MPAndroidChart 일반적인 설정 속성 (1) - 응용 층 MPAndroidChart 프로젝트 실전 (1) - 대비 성 막대 그래프 실현 MPAndroidChart 프로젝트 실전 (二) - 쌍 평활 곡선 (쌍 절 선도) 과 MarkView 실현 MPAndroidChart 프로젝트 실전 (3) - 떡 모양 그림 실현 과 문자 중복 문제 해결 MPAndroidChart 프로젝트 실전 (4) - 막대 그래프 구현 및 X 축 문 자 는 문제 와 막대 그래프 에 문 자 를 표시 하지 않 습 니 다. 
한 주 개 술
이 문 제 는 선도 에서 원래 나 에 게 처리 하도록 맡 겼 는데 하루 를 끌 었 지만 해결 되 지 않 아 동료 에 게 전 달 했 고 절충 처리 (MPChart 를 미 끄 러 뜨 릴 때 외부 미끄럼 금지) 를 했다.
이주 직접 상 코드
방법 1:
/**
 *       
 *
 * @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 가 미 끄 러 지지 않 습 니 다.
방법 2:
개조 집성 된 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);
    }
}

좋은 웹페이지 즐겨찾기