Android Open Source - customhellochartdemo Chart Zoomer






From Project

Back to project page customhellochartdemo.

License

The source code is released under:

Apache License

If you think the Android project customhellochartdemo listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package lecho.lib.hellocharts.gesture;
//  w  w w.j a  v  a  2  s. co  m
import lecho.lib.hellocharts.ChartComputator;
import lecho.lib.hellocharts.model.Viewport;
import android.content.Context;
import android.graphics.PointF;
import android.view.MotionEvent;

/**
 * Encapsulates zooming functionality.
 * 
 */
public class ChartZoomer {
  public static final float ZOOM_AMOUNT = 0.25f;
  private ZoomerCompat zoomer;
  private ZoomType zoomType;
  private PointF zoomFocalPoint = new PointF();// Used for double tap zoom
  private PointF viewportFocus = new PointF();
  private Viewport scrollerStartViewport = new Viewport(); // Used only for zooms and flings

  public ChartZoomer(Context context, ZoomType zoomType) {
    zoomer = new ZoomerCompat(context);
    this.zoomType = zoomType;
  }

  public boolean startZoom(MotionEvent e, ChartComputator computator) {
    zoomer.forceFinished(true);
    scrollerStartViewport.set(computator.getCurrentViewport());
    if (!computator.rawPixelsToDataPoint(e.getX(), e.getY(), zoomFocalPoint)) {
      // Focus point is not within content area.
      return false;
    }
    zoomer.startZoom(ZOOM_AMOUNT);
    return true;
  }

  public boolean computeZoom(ChartComputator computator) {
    if (zoomer.computeZoom()) {
      // Performs the zoom since a zoom is in progress (either programmatically or via
      // double-touch).
      final float newWidth = (1.0f - zoomer.getCurrZoom()) * scrollerStartViewport.width();
      final float newHeight = (1.0f - zoomer.getCurrZoom()) * scrollerStartViewport.height();
      final float pointWithinViewportX = (zoomFocalPoint.x - scrollerStartViewport.left)
          / scrollerStartViewport.width();
      final float pointWithinViewportY = (zoomFocalPoint.y - scrollerStartViewport.bottom)
          / scrollerStartViewport.height();

      float left = zoomFocalPoint.x - newWidth * pointWithinViewportX;
      float top = zoomFocalPoint.y + newHeight * (1 - pointWithinViewportY);
      float right = zoomFocalPoint.x + newWidth * (1 - pointWithinViewportX);
      float bottom = zoomFocalPoint.y - newHeight * pointWithinViewportY;
      setCurrentViewport(computator, left, top, right, bottom);
      return true;
    }
    return false;
  }

  public boolean scale(ChartComputator computator, float focusX, float focusY, float scale) {
    /**
     * Smaller viewport means bigger zoom so for zoomIn scale should have value <1, for zoomOout >1
     */
    final float newWidth = scale * computator.getCurrentViewport().width();
    final float newHeight = scale * computator.getCurrentViewport().height();
    if (!computator.rawPixelsToDataPoint(focusX, focusY, viewportFocus)) {
      // Focus point is not within content area.
      return false;
    }

    float left = viewportFocus.x - (focusX - computator.getContentRect().left)
        * (newWidth / computator.getContentRect().width());
    float top = viewportFocus.y + (focusY - computator.getContentRect().top)
        * (newHeight / computator.getContentRect().height());
    float right = left + newWidth;
    float bottom = top - newHeight;
    setCurrentViewport(computator, left, top, right, bottom);
    return true;
  }

  private void setCurrentViewport(ChartComputator computator, float left, float top, float right, float bottom) {
    Viewport currentViewport = computator.getCurrentViewport();
    if (ZoomType.HORIZONTAL_AND_VERTICAL == zoomType) {
      computator.setCurrentViewport(left, top, right, bottom);
    } else if (ZoomType.HORIZONTAL == zoomType) {
      computator.setCurrentViewport(left, currentViewport.top, right, currentViewport.bottom);
    } else if (ZoomType.VERTICAL == zoomType) {
      computator.setCurrentViewport(currentViewport.left, top, currentViewport.right, bottom);
    }
  }

  public ZoomType getZoomType() {
    return zoomType;
  }

  public void setZoomType(ZoomType zoomType) {
    this.zoomType = zoomType;
  }
}




Java Source Code List

lecho.lib.hellocharts.ChartComputator.java
lecho.lib.hellocharts.DummyChartAnimationListener.java
lecho.lib.hellocharts.DummyVieportChangeListener.java
lecho.lib.hellocharts.PreviewChartComputator.java
lecho.lib.hellocharts.ViewportChangeListener.java
lecho.lib.hellocharts.animation.ChartAnimationListener.java
lecho.lib.hellocharts.animation.ChartDataAnimatorV14.java
lecho.lib.hellocharts.animation.ChartDataAnimatorV8.java
lecho.lib.hellocharts.animation.ChartDataAnimator.java
lecho.lib.hellocharts.animation.ChartViewportAnimatorV14.java
lecho.lib.hellocharts.animation.ChartViewportAnimatorV8.java
lecho.lib.hellocharts.animation.ChartViewportAnimator.java
lecho.lib.hellocharts.animation.PieChartRotationAnimatorV14.java
lecho.lib.hellocharts.animation.PieChartRotationAnimatorV8.java
lecho.lib.hellocharts.animation.PieChartRotationAnimator.java
lecho.lib.hellocharts.gesture.ChartScroller.java
lecho.lib.hellocharts.gesture.ChartTouchHandler.java
lecho.lib.hellocharts.gesture.ChartZoomer.java
lecho.lib.hellocharts.gesture.ContainerScrollType.java
lecho.lib.hellocharts.gesture.PieChartTouchHandler.java
lecho.lib.hellocharts.gesture.PreviewChartTouchHandler.java
lecho.lib.hellocharts.gesture.ZoomType.java
lecho.lib.hellocharts.gesture.ZoomerCompat.java
lecho.lib.hellocharts.model.AbstractChartData.java
lecho.lib.hellocharts.model.ArcValue.java
lecho.lib.hellocharts.model.AxisValue.java
lecho.lib.hellocharts.model.Axis.java
lecho.lib.hellocharts.model.BubbleChartData.java
lecho.lib.hellocharts.model.BubbleValue.java
lecho.lib.hellocharts.model.ChartData.java
lecho.lib.hellocharts.model.ColumnChartData.java
lecho.lib.hellocharts.model.ColumnValue.java
lecho.lib.hellocharts.model.Column.java
lecho.lib.hellocharts.model.ComboLineColumnChartData.java
lecho.lib.hellocharts.model.LineChartData.java
lecho.lib.hellocharts.model.Line.java
lecho.lib.hellocharts.model.PieChartData.java
lecho.lib.hellocharts.model.PointValue.java
lecho.lib.hellocharts.model.SelectedValue.java
lecho.lib.hellocharts.model.SimpleValueFormatter.java
lecho.lib.hellocharts.model.ValueFormatter.java
lecho.lib.hellocharts.model.ValueShape.java
lecho.lib.hellocharts.model.Viewport.java
lecho.lib.hellocharts.provider.BubbleChartDataProvider.java
lecho.lib.hellocharts.provider.ColumnChartDataProvider.java
lecho.lib.hellocharts.provider.ComboLineColumnChartDataProvider.java
lecho.lib.hellocharts.provider.LineChartDataProvider.java
lecho.lib.hellocharts.provider.PieChartDataProvider.java
lecho.lib.hellocharts.renderer.AbstractChartRenderer.java
lecho.lib.hellocharts.renderer.AxesRenderer.java
lecho.lib.hellocharts.renderer.BubbleChartRenderer.java
lecho.lib.hellocharts.renderer.ChartRenderer.java
lecho.lib.hellocharts.renderer.ColumnChartRenderer.java
lecho.lib.hellocharts.renderer.ComboLineColumnChartRenderer.java
lecho.lib.hellocharts.renderer.LineChartRenderer.java
lecho.lib.hellocharts.renderer.PieChartRenderer.java
lecho.lib.hellocharts.renderer.PreviewColumnChartRenderer.java
lecho.lib.hellocharts.renderer.PreviewLineChartRenderer.java
lecho.lib.hellocharts.samples.AboutActivity.java
lecho.lib.hellocharts.samples.BrokenLineChartActivity.java
lecho.lib.hellocharts.samples.BrokenLineView.java
lecho.lib.hellocharts.samples.BubbleChartActivity.java
lecho.lib.hellocharts.samples.ColumnChartActivity.java
lecho.lib.hellocharts.samples.ComboLineColumnChartActivity.java
lecho.lib.hellocharts.samples.GoodBadChartActivity.java
lecho.lib.hellocharts.samples.LineChartActivity.java
lecho.lib.hellocharts.samples.LineColumnDependencyActivity.java
lecho.lib.hellocharts.samples.MainActivity.java
lecho.lib.hellocharts.samples.PieChartActivity.java
lecho.lib.hellocharts.samples.PreviewColumnChartActivity.java
lecho.lib.hellocharts.samples.PreviewLineChartActivity.java
lecho.lib.hellocharts.samples.SpeedChartActivity.java
lecho.lib.hellocharts.samples.TempoChartActivity.java
lecho.lib.hellocharts.samples.ViewPagerChartsActivity.java
lecho.lib.hellocharts.util.AxisAutoValues.java
lecho.lib.hellocharts.util.Utils.java
lecho.lib.hellocharts.view.AbstractChartView.java
lecho.lib.hellocharts.view.BubbleChartView.java
lecho.lib.hellocharts.view.Chart.java
lecho.lib.hellocharts.view.ColumnChartView.java
lecho.lib.hellocharts.view.ComboLineColumnChartView.java
lecho.lib.hellocharts.view.LineChartView.java
lecho.lib.hellocharts.view.PieChartView.java
lecho.lib.hellocharts.view.PreviewColumnChartView.java
lecho.lib.hellocharts.view.PreviewLineChartView.java
lecho.lib.hellocharts.view.hack.HackyDrawerLayout.java
lecho.lib.hellocharts.view.hack.HackyViewPager.java