Android Open Source - customhellochartdemo Pie Chart View






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.view;
/*from w w w  .  java 2s .co m*/
import lecho.lib.hellocharts.BuildConfig;
import lecho.lib.hellocharts.animation.PieChartRotationAnimator;
import lecho.lib.hellocharts.animation.PieChartRotationAnimatorV14;
import lecho.lib.hellocharts.animation.PieChartRotationAnimatorV8;
import lecho.lib.hellocharts.gesture.PieChartTouchHandler;
import lecho.lib.hellocharts.model.ArcValue;
import lecho.lib.hellocharts.model.ChartData;
import lecho.lib.hellocharts.model.PieChartData;
import lecho.lib.hellocharts.model.SelectedValue;
import lecho.lib.hellocharts.provider.PieChartDataProvider;
import lecho.lib.hellocharts.renderer.PieChartRenderer;
import android.content.Context;
import android.graphics.RectF;
import android.os.Build;
import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;

/**
 * 
 * PieChart is a little different than others charts. It doesn't have axes. It doesn't support viewport so changing
 * viewport wont work. Instead it support "Circle Oval". Pinch-to-Zoom and double tap zoom wont work either. Instead of
 * scroll there is chart rotation if isChartRotationEnabled is set to true. PieChart looks the best when it has the same
 * width and height, drawing chart on rectangle with proportions other than 1:1 will left some empty spaces.
 * 
 * @author Leszek Wach
 * 
 */
public class PieChartView extends AbstractChartView implements PieChartDataProvider {
  private static final String TAG = "PieChartView";
  protected PieChartData data;
  protected PieChartOnValueTouchListener onValueTouchListener = new DummyOnValueTouchListener();
  protected PieChartRenderer pieChartRenderer;
  protected PieChartRotationAnimator rotationAnimator;

  public PieChartView(Context context) {
    this(context, null, 0);
  }

  public PieChartView(Context context, AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public PieChartView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    pieChartRenderer = new PieChartRenderer(context, this, this);
    chartRenderer = pieChartRenderer;
    touchHandler = new PieChartTouchHandler(context, this);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
      this.rotationAnimator = new PieChartRotationAnimatorV8(this);
    } else {
      this.rotationAnimator = new PieChartRotationAnimatorV14(this);
    }
    setPieChartData(PieChartData.generateDummyData());
  }

  @Override
  public void setPieChartData(PieChartData data) {
    if (BuildConfig.DEBUG) {
      Log.d(TAG, "Setting data for ColumnChartView");
    }

    if (null == data) {
      this.data = PieChartData.generateDummyData();
    } else {
      this.data = data;
    }
    axesRenderer.initAxesAttributes();
    chartRenderer.initDataAttributes();
    chartRenderer.initMaxViewport();
    chartRenderer.initCurrentViewport();

    ViewCompat.postInvalidateOnAnimation(PieChartView.this);
  }

  @Override
  public PieChartData getPieChartData() {
    return data;
  }

  @Override
  public ChartData getChartData() {
    return data;
  }

  @Override
  public void callTouchListener() {
    SelectedValue selectedValue = chartRenderer.getSelectedValue();

    if (selectedValue.isSet()) {
      ArcValue arcValue = data.getValues().get(selectedValue.getFirstIndex());
      onValueTouchListener.onValueTouched(selectedValue.getFirstIndex(), arcValue);
    } else {
      onValueTouchListener.onNothingTouched();
    }
  }

  public PieChartOnValueTouchListener getOnValueTouchListener() {
    return onValueTouchListener;
  }

  public void setOnValueTouchListener(PieChartOnValueTouchListener touchListener) {
    if (null == touchListener) {
      this.onValueTouchListener = new DummyOnValueTouchListener();
    } else {
      this.onValueTouchListener = touchListener;
    }
  }

  /**
   * Returns rectangle that will constraint pie chart area.
   */
  public RectF getCircleOval() {
    return pieChartRenderer.getCircleOval();
  }

  /**
   * Use this to change pie chart area. Because by default CircleOval is calculated onSizeChanged() you must call this
   * method after size of PieChartView is calculated. In most cases it will probably be easier to use
   * {@link #setCircleFillRatio(float)} to change chart area or just use view padding.
   */
  public void setCircleOval(RectF orginCircleOval) {
    pieChartRenderer.setCircleOval(orginCircleOval);
    ViewCompat.postInvalidateOnAnimation(this);
  }

  /**
   * Returns pie chart rotation, 0 rotation means that 0 degrees is at 3 o'clock. Don't confuse with
   * {@link View#getRotation()}.
   * 
   * @return
   */
  public int getChartRotation() {
    return pieChartRenderer.getChartRotation();
  }

  /**
   * Set pie chart rotation. Don't confuse with {@link View#getRotation()}.
   * 
   * @param rotation
   * 
   * @see #getChartRotation()
   */
  public void setChartRotation(int rotation, boolean isAnimated) {
    if (isAnimated) {
      rotationAnimator.cancelAnimation();
      rotationAnimator.startAnimation(pieChartRenderer.getChartRotation(), rotation);
    } else {
      pieChartRenderer.setChartRotation(rotation);
    }
    ViewCompat.postInvalidateOnAnimation(this);
  }

  public boolean isChartRotationEnabled() {
    if (touchHandler instanceof PieChartTouchHandler) {
      return ((PieChartTouchHandler) touchHandler).isRotationEnabled();
    } else {
      return false;
    }
  }

  /**
   * Set false if you don't wont the chart to be rotated by touch gesture. Rotating programmatically will still work.
   * 
   * @param isRotationEnabled
   */
  public void setChartRotationEnabled(boolean isRotationEnabled) {
    if (touchHandler instanceof PieChartTouchHandler) {
      ((PieChartTouchHandler) touchHandler).setRotationEnabled(isRotationEnabled);
    }
  }

  /**
   * Returns ArcValue that is under given angle, selectedValue (if not null) will be hold arc index.
   */
  public ArcValue getValueForAngle(int angle, SelectedValue selectedValue) {
    return pieChartRenderer.getValueForAngle(angle, selectedValue);
  }

  /**
   * @see #setCircleFillRatio(float)
   */
  public float getCircleFillRatio() {
    return pieChartRenderer.getCircleFillRatio();
  }

  /**
   * Set how much of view area should be taken by chart circle. Value should be between 0 and 1. Default is 1 so
   * circle will have radius equals min(View.width, View.height).
   */
  public void setCircleFillRatio(float fillRatio) {
    pieChartRenderer.setCircleFillRatio(fillRatio);
    ViewCompat.postInvalidateOnAnimation(this);
  }

  public interface PieChartOnValueTouchListener {
    public void onValueTouched(int selectedArc, ArcValue value);

    public void onNothingTouched();

  }

  private static class DummyOnValueTouchListener implements PieChartOnValueTouchListener {

    @Override
    public void onValueTouched(int selectedArc, ArcValue value) {
    }

    @Override
    public void onNothingTouched() {
    }
  }
}




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