@Override public void moveToWithAnimation(float x, float y) { Viewport scrollViewport = computeScrollViewport(x, y); setCurrentViewportWithAnimation(scrollViewport); }
@Override public void setZoomLevel(float x, float y, float zoomLevel) { Viewport zoomViewport = computeZoomViewport(x, y, zoomLevel); setCurrentViewport(zoomViewport); }
@Override protected void onSizeChanged(int width, int height, int oldWidth, int oldHeight) { super.onSizeChanged(width, height, oldWidth, oldHeight); chartComputator.setContentRect(getWidth(), getHeight(), getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom()); chartRenderer.onChartSizeChanged(); axesRenderer.onChartSizeChanged(); }
@Override public void moveTo(float x, float y) { Viewport scrollViewport = computeScrollViewport(x, y); setCurrentViewport(scrollViewport); }
private Viewport computeZoomViewport(float x, float y, float zoomLevel) { final Viewport maxViewport = getMaximumViewport(); Viewport zoomViewport = new Viewport(getMaximumViewport()); } else if (zoomLevel > getMaxZoom()) { zoomLevel = getMaxZoom(); ZoomType zoomType = getZoomType(); if (ZoomType.HORIZONTAL_AND_VERTICAL == zoomType) { zoomViewport.set(left, top, right, bottom);
@Override public float getZoomLevel() { Viewport maxViewport = getMaximumViewport(); Viewport currentViewport = getCurrentViewport(); return Math.max(maxViewport.width() / currentViewport.width(), maxViewport.height() / currentViewport.height()); }
@Override public void setZoomLevelWithAnimation(float x, float y, float zoomLevel) { Viewport zoomViewport = computeZoomViewport(x, y, zoomLevel); setCurrentViewportWithAnimation(zoomViewport); }
@Override public void animationDataFinished() { getChartData().finish(); chartRenderer.onChartViewportChanged(); ViewCompat.postInvalidateOnAnimation(this); }
@Override public void setCurrentViewportWithAnimation(Viewport targetViewport, long duration) { if (null != targetViewport) { viewportAnimator.cancelAnimation(); viewportAnimator.startAnimation(getCurrentViewport(), targetViewport, duration); } ViewCompat.postInvalidateOnAnimation(this); }
@Override public void selectValue(SelectedValue selectedValue) { chartRenderer.selectValue(selectedValue); callTouchListener(); ViewCompat.postInvalidateOnAnimation(this); }
@Override public Viewport getCurrentViewport() { return getChartRenderer().getCurrentViewport(); }
private Viewport computeScrollViewport(float x, float y) { Viewport maxViewport = getMaximumViewport(); Viewport currentViewport = getCurrentViewport(); Viewport scrollViewport = new Viewport(currentViewport); if (maxViewport.contains(x, y)) { final float width = currentViewport.width(); final float height = currentViewport.height(); final float halfWidth = width / 2; final float halfHeight = height / 2; float left = x - halfWidth; float top = y + halfHeight; left = Math.max(maxViewport.left, Math.min(left, maxViewport.right - width)); top = Math.max(maxViewport.bottom + height, Math.min(top, maxViewport.top)); scrollViewport.set(left, top, left + width, top - height); } return scrollViewport; }
@Override public void animationDataUpdate(float scale) { getChartData().update(scale); chartRenderer.onChartViewportChanged(); ViewCompat.postInvalidateOnAnimation(this); }
@Override public void setCurrentViewportWithAnimation(Viewport targetViewport) { if (null != targetViewport) { viewportAnimator.cancelAnimation(); viewportAnimator.startAnimation(getCurrentViewport(), targetViewport); } ViewCompat.postInvalidateOnAnimation(this); }