Android Open Source - Android-Charts B O L L M A Slip Candle Stick Chart






From Project

Back to project page Android-Charts.

License

The source code is released under:

Apache License??Version 2.0, January 2004??http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and condi...

If you think the Android project Android-Charts 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

/*
 * BOLLMASlipCandleStickChart.java/*w  w w.  j  av a2  s  .co m*/
 * Android-Charts
 *
 * Created by limc on 2014.
 *
 * Copyright 2011 limc.cn All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package cn.limc.androidcharts.view;

import java.util.List;

import cn.limc.androidcharts.entity.DateValueEntity;
import cn.limc.androidcharts.entity.LineEntity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PointF;
import android.util.AttributeSet;

/**
 * <p>
 * en
 * </p>
 * <p>
 * jp
 * </p>
 * <p>
 * cn
 * </p>
 * 
 * @author limc
 * @version v1.0 2014/01/23 16:27:58
 * 
 */
public class BOLLMASlipCandleStickChart extends MASlipCandleStickChart {

  private List<LineEntity<DateValueEntity>> bandData;

  /**
   * <p>
   * Constructor of BOLLMASlipCandleStickChart
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart????????
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart???????????
   * </p>
   * 
   * @param context
   * @param attrs
   * @param defStyle
   */
  public BOLLMASlipCandleStickChart(Context context, AttributeSet attrs,
      int defStyle) {
    super(context, attrs, defStyle);
    // TODO Auto-generated constructor stub
  }

  /**
   * <p>
   * Constructor of BOLLMASlipCandleStickChart
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart????????
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart???????????
   * </p>
   * 
   * @param context
   * @param attrs
   */
  public BOLLMASlipCandleStickChart(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub
  }

  /**
   * <p>
   * Constructor of BOLLMASlipCandleStickChart
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart????????
   * </p>
   * <p>
   * BOLLMASlipCandleStickChart???????????
   * </p>
   * 
   * @param context
   */
  public BOLLMASlipCandleStickChart(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
  }

  @Override
  protected void calcDataValueRange() {
    super.calcDataValueRange();

    double maxValue = this.maxValue;
    double minValue = this.minValue;
    // ???????MA?
    for (int i = 0; i < this.bandData.size(); i++) {
      LineEntity<DateValueEntity> line = this.bandData.get(i);
      if (line != null && line.getLineData().size() > 0) {
        // ???????????????
        for (int j = displayFrom; j < displayFrom + displayNumber; j++) {
          DateValueEntity lineData = line.getLineData().get(j);
          if (lineData.getValue() < minValue) {
            minValue = lineData.getValue();
          }

          if (lineData.getValue() > maxValue) {
            maxValue = lineData.getValue();
          }

        }
      }
    }
    this.maxValue = maxValue;
    this.minValue = minValue;
  }

  /*
   * (non-Javadoc)
   * 
   * <p>Called when is going to draw this chart<p> <p>???????????????????????<p>
   * <p>???????<p>
   * 
   * @param canvas
   * 
   * @see android.view.View#onDraw(android.graphics.Canvas)
   */
  @Override
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // draw lines
    if (null != bandData && bandData.size() >= 2) {
      drawAreas(canvas);
      drawBandBorder(canvas);
    }
  }

  /**
   * <p>
   * draw lines
   * </p>
   * <p>
   * ????????
   * </p>
   * <p>
   * ??????
   * </p>
   * 
   * @param canvas
   */
  protected void drawAreas(Canvas canvas) {
    if (null == bandData) {
      return;
    }
    // distance between two points
    float lineLength;
    // start points X
    float startX;
    float lastY = 0;
    float lastX = 0;

    LineEntity<DateValueEntity> line1 = (LineEntity<DateValueEntity>) bandData
        .get(0);
    LineEntity<DateValueEntity> line2 = (LineEntity<DateValueEntity>) bandData
        .get(1);
    List<DateValueEntity> line1Data = line1.getLineData();
    List<DateValueEntity> line2Data = line2.getLineData();

    if (line1.isDisplay() == false || line2.isDisplay() == false) {
      return;
    }
    if (line1Data == null || line2Data == null) {
      return;
    }

    Paint mPaint = new Paint();
    mPaint.setColor(line1.getLineColor());
    mPaint.setAlpha(70);
    mPaint.setAntiAlias(true);
    // set start points X
    if (gridAlignType == ALIGN_TYPE_CENTER) {
            lineLength= (dataQuadrant.getQuadrantPaddingWidth() / displayNumber) - stickSpacing;
            startX = dataQuadrant.getQuadrantPaddingStartX() + lineLength / 2;
        }else {
            lineLength= (dataQuadrant.getQuadrantPaddingWidth() / (displayNumber - 1)) - stickSpacing;
            startX = dataQuadrant.getQuadrantPaddingStartX();
        }
    Path areaPath = new Path();
    for (int j = displayFrom; j < displayFrom + displayNumber; j++) {
      float value1 = line1Data.get(j).getValue();
      float value2 = line2Data.get(j).getValue();

      // calculate Y
      float valueY1 = (float) ((1f - (value1 - minValue)
          / (maxValue - minValue)) * dataQuadrant.getQuadrantPaddingHeight())
          + dataQuadrant.getQuadrantPaddingStartY();
      float valueY2 = (float) ((1f - (value2 - minValue)
          / (maxValue - minValue)) * dataQuadrant.getQuadrantPaddingHeight())
          + dataQuadrant.getQuadrantPaddingStartY();

      // ????????
      if (j == displayFrom) {
        areaPath.moveTo(startX, valueY1);
        areaPath.lineTo(startX, valueY2);
        areaPath.moveTo(startX, valueY1);
      } else {
        areaPath.lineTo(startX, valueY1);
        areaPath.lineTo(startX, valueY2);
        areaPath.lineTo(lastX, lastY);

        areaPath.close();
        areaPath.moveTo(startX, valueY1);
      }

      lastX = startX;
      lastY = valueY2;
      startX = startX + stickSpacing + lineLength;
    }
    areaPath.close();
    canvas.drawPath(areaPath, mPaint);
  }

  /**
   * <p>
   * draw lines
   * </p>
   * <p>
   * ????????
   * </p>
   * <p>
   * ??????
   * </p>
   * 
   * @param canvas
   */
  protected void drawBandBorder(Canvas canvas) {

    if (null == this.bandData) {
      return;
    }

    if (bandData.size() <= 0) {
      return;
    }
    // distance between two points
    float lineLength = dataQuadrant.getQuadrantPaddingWidth() / displayNumber - stickSpacing;
    // start points X
    float startX;

    // draw lines
    for (int i = 0; i < bandData.size(); i++) {
      LineEntity<DateValueEntity> line = (LineEntity<DateValueEntity>) bandData
          .get(i);
      if (line == null) {
        continue;
      }
      if (line.isDisplay() == false) {
        continue;
      }
      List<DateValueEntity> lineData = line.getLineData();
      if (lineData == null) {
        continue;
      }
      Paint mPaint = new Paint();
      mPaint.setColor(line.getLineColor());
      mPaint.setAntiAlias(true);
      // set start points X
      startX = dataQuadrant.getQuadrantPaddingStartX() + lineLength / 2;
      // start point
      PointF ptFirst = null;
      for (int j = displayFrom; j < displayFrom + displayNumber; j++) {
        float value = lineData.get(j).getValue();
        // calculate Y
        float valueY = (float) ((1f - (value - minValue)
            / (maxValue - minValue)) * dataQuadrant.getQuadrantPaddingHeight())
            + dataQuadrant.getQuadrantPaddingStartY();

        // if is not last point connect to previous point
        if (j > displayFrom) {
          canvas.drawLine(ptFirst.x, ptFirst.y, startX, valueY,
              mPaint);
        }
        // reset
        ptFirst = new PointF(startX, valueY);
        startX = startX + stickSpacing + lineLength;
      }
    }
  }

  /**
   * @return the bandData
   */
  public List<LineEntity<DateValueEntity>> getBandData() {
    return bandData;
  }

  /**
   * @param bandData
   *            the bandData to set
   */
  public void setBandData(List<LineEntity<DateValueEntity>> bandData) {
    this.bandData = bandData;
  }

}




Java Source Code List

cn.limc.androidcharts.AndroidChartsActivity.java
cn.limc.androidcharts.common.Axis.java
cn.limc.androidcharts.common.ChartRender.java
cn.limc.androidcharts.common.CrossLines.java
cn.limc.androidcharts.common.HorizontalAxis.java
cn.limc.androidcharts.common.IAxis.java
cn.limc.androidcharts.common.IChart.java
cn.limc.androidcharts.common.ICrossLines.java
cn.limc.androidcharts.common.IDataCursor.java
cn.limc.androidcharts.common.IFlexableGrid.java
cn.limc.androidcharts.common.IGrid.java
cn.limc.androidcharts.common.IQuadrant.java
cn.limc.androidcharts.common.IRender.java
cn.limc.androidcharts.common.Quadrant.java
cn.limc.androidcharts.common.SectionDataCursor.java
cn.limc.androidcharts.common.SimpleDataCursor.java
cn.limc.androidcharts.common.VerticalAxis.java
cn.limc.androidcharts.entity.ColoredStickEntity.java
cn.limc.androidcharts.entity.DateValueEntity.java
cn.limc.androidcharts.entity.IChartData.java
cn.limc.androidcharts.entity.IEntity.java
cn.limc.androidcharts.entity.IHasColor.java
cn.limc.androidcharts.entity.IHasDate.java
cn.limc.androidcharts.entity.IMeasurable.java
cn.limc.androidcharts.entity.IStickEntity.java
cn.limc.androidcharts.entity.LineEntity.java
cn.limc.androidcharts.entity.ListChartData.java
cn.limc.androidcharts.entity.MACDEntity.java
cn.limc.androidcharts.entity.OHLCEntity.java
cn.limc.androidcharts.entity.StickEntity.java
cn.limc.androidcharts.entity.TitleValueColorEntity.java
cn.limc.androidcharts.entity.TitleValueEntity.java
cn.limc.androidcharts.event.IDisplayCursorListener.java
cn.limc.androidcharts.event.IGestureDetector.java
cn.limc.androidcharts.event.ISlipable.java
cn.limc.androidcharts.event.ITouchable.java
cn.limc.androidcharts.event.IZoomable.java
cn.limc.androidcharts.event.OnSlipGestureListener.java
cn.limc.androidcharts.event.OnTouchGestureListener.java
cn.limc.androidcharts.event.OnZoomGestureListener.java
cn.limc.androidcharts.event.SlipGestureDetector.java
cn.limc.androidcharts.event.TouchGestureDetector.java
cn.limc.androidcharts.event.ZoomGestureDetector.java
cn.limc.androidcharts.mole.AbstractMole.java
cn.limc.androidcharts.mole.IMoleProvider.java
cn.limc.androidcharts.mole.IMole.java
cn.limc.androidcharts.mole.RectMole.java
cn.limc.androidcharts.mole.StickMole.java
cn.limc.androidcharts.view.AbstractBaseChart.java
cn.limc.androidcharts.view.BOLLMASlipCandleStickChart.java
cn.limc.androidcharts.view.CandleStickChart.java
cn.limc.androidcharts.view.ColoredSlipStickChart.java
cn.limc.androidcharts.view.DataGridChart.java
cn.limc.androidcharts.view.GridChart.java
cn.limc.androidcharts.view.LineChart.java
cn.limc.androidcharts.view.MACDChart.java
cn.limc.androidcharts.view.MACandleStickChart.java
cn.limc.androidcharts.view.MASlipCandleStickChart.java
cn.limc.androidcharts.view.MASlipStickChart.java
cn.limc.androidcharts.view.MAStickChart.java
cn.limc.androidcharts.view.MinusStickChart.java
cn.limc.androidcharts.view.PeriodDataGridChart.java
cn.limc.androidcharts.view.PieChart.java
cn.limc.androidcharts.view.RadarChart.java
cn.limc.androidcharts.view.RoseChart.java
cn.limc.androidcharts.view.RoundChart.java
cn.limc.androidcharts.view.SlipAreaChart.java
cn.limc.androidcharts.view.SlipBandAreaChart.java
cn.limc.androidcharts.view.SlipCandleStickChart.java
cn.limc.androidcharts.view.SlipLineChart.java
cn.limc.androidcharts.view.SlipMinusStickChart.java
cn.limc.androidcharts.view.SlipStickChart.java
cn.limc.androidcharts.view.SpiderWebChart.java
cn.limc.androidcharts.view.StickChart.java