Android Open Source - Android-Charts Slip 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

/*
 * SlipStickChart.java/*w ww  . ja  v  a 2  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 cn.limc.androidcharts.entity.IMeasurable;
import cn.limc.androidcharts.event.IGestureDetector;
import cn.limc.androidcharts.event.ISlipable;
import cn.limc.androidcharts.event.OnSlipGestureListener;
import cn.limc.androidcharts.event.SlipGestureDetector;
import cn.limc.androidcharts.mole.StickMole;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.PointF;
import android.util.AttributeSet;
import android.view.MotionEvent;

/**
 * <p>
 * en
 * </p>
 * <p>
 * jp
 * </p>
 * <p>
 * cn
 * </p>
 * 
 * @author limc
 * @version v1.0 2014-1-20 ????2:03:08
 * 
 */
public class SlipStickChart extends StickChart implements ISlipable {

  public static final int DEFAULT_DISPLAY_FROM = 0;
  public static final int DEFAULT_DISPLAY_NUMBER = 50;
  public static final int DEFAULT_MIN_DISPLAY_NUMBER = 20;
  public static final int DEFAULT_ZOOM_BASE_LINE = ZOOM_BASE_LINE_CENTER;

  protected int displayFrom = DEFAULT_DISPLAY_FROM;
  protected int displayNumber = DEFAULT_DISPLAY_NUMBER;
  protected int minDisplayNumber = DEFAULT_MIN_DISPLAY_NUMBER;
  protected int zoomBaseLine = DEFAULT_ZOOM_BASE_LINE;
  
  protected OnSlipGestureListener onSlipGestureListener = new OnSlipGestureListener();
  protected IGestureDetector slipGestureDetector = new SlipGestureDetector<ISlipable>(this);

  /**
   * <p>
   * Constructor of SlipStickChart
   * </p>
   * <p>
   * SlipStickChart????????
   * </p>
   * <p>
   * SlipStickChart???????????
   * </p>
   * 
   * @param context
   */
  public SlipStickChart(Context context) {
    super(context);
  }

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

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

  /*
   * (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);
  }

  @Override
  protected void drawSticks(Canvas canvas) {
    if (null == stickData) {
      return;
    }
    if (stickData.size() == 0) {
      return;
    }

    float stickWidth = dataQuadrant.getQuadrantPaddingWidth() / getDisplayNumber()
        - stickSpacing;
    float stickX = dataQuadrant.getQuadrantPaddingStartX();

    for (int i = getDisplayFrom(); i < getDisplayTo(); i++) {
      IMeasurable stick = stickData.get(i);
      
      StickMole mole = (StickMole)provider.getMole();
      mole.setUp(this,stick,stickX,stickWidth);
      mole.draw(canvas);

      // next x
      stickX = stickX + stickSpacing + stickWidth;
    }
  }

  protected float olddistance = 0f;
  protected float newdistance = 0f;

  protected PointF startPointA;
  protected PointF startPointB;


  /*
   * (non-Javadoc)
   * 
   * @param event
   * @return 
   * @see cn.limc.androidcharts.view.StickChart#onTouchEvent(android.view.MotionEvent)
   */
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    // valid
    if (!isValidTouchPoint(event.getX(), event.getY())) {
      return false;
    }
    if (null == stickData || stickData.size() == 0) {
      return false;
    }
    return slipGestureDetector.onTouchEvent(event);
  }

  /* (non-Javadoc)
   *  
   * @see cn.limc.androidcharts.common.ISlipable#moveRight() 
   */
  public void moveRight() {
    int dataSize = stickData.size();
    if (getDisplayTo() < dataSize - SLIP_STEP) {
      setDisplayFrom(getDisplayFrom() + SLIP_STEP);
    } else {
      setDisplayFrom(dataSize - getDisplayNumber());
    }

    // ????displayFrom??
    if (getDisplayTo() >= dataSize) {
      setDisplayFrom(dataSize - getDisplayNumber());
    }
    
    this.postInvalidate();

    //Listener
    if (onDisplayCursorListener != null) {
      onDisplayCursorListener.onCursorChanged(this,getDisplayFrom(), getDisplayNumber());
    }
  }

  /* (non-Javadoc)
   *  
   * @see cn.limc.androidcharts.common.ISlipable#moveLeft() 
   */
  public void moveLeft() {
    int dataSize = stickData.size();

    if (getDisplayFrom() <= SLIP_STEP) {
      setDisplayFrom(0);
    } else if (getDisplayFrom() > SLIP_STEP) {
      setDisplayFrom(getDisplayFrom() - SLIP_STEP);
    } else {

    }

    // ????displayFrom??
    if (getDisplayTo() >= dataSize) {
      setDisplayFrom(dataSize - getDisplayNumber());
    }
    
    this.postInvalidate();

    //Listener
    if (onDisplayCursorListener != null) {
      onDisplayCursorListener.onCursorChanged(this,getDisplayFrom(), getDisplayNumber());
    }
  }
  
  /*
   * (non-Javadoc)
   *  
   * @see cn.limc.androidcharts.view.StickChart#zoomIn()
   */
  @Override
  public void zoomIn() {
    if (getDisplayNumber() > getMinDisplayNumber()) {
      // ????????
      if (zoomBaseLine == ZOOM_BASE_LINE_CENTER) {
        setDisplayNumber(getDisplayNumber() - ZOOM_STEP);
        setDisplayFrom(getDisplayFrom() + ZOOM_STEP / 2);
      } else if (zoomBaseLine == ZOOM_BASE_LINE_LEFT) {
        setDisplayNumber(getDisplayNumber() - ZOOM_STEP);
      } else if (zoomBaseLine == ZOOM_BASE_LINE_RIGHT) {
        setDisplayNumber(getDisplayNumber() - ZOOM_STEP);
        setDisplayFrom(getDisplayFrom() + ZOOM_STEP);
      }

      // ????displayNumber??
      if (getDisplayNumber() < getMinDisplayNumber()) {
        setDisplayNumber(getMinDisplayNumber());
      }

      // ????displayFrom??
      if (getDisplayTo() >= stickData.size()) {
        setDisplayFrom(stickData.size() - getDisplayNumber());
      }
      
      this.postInvalidate();

      //Listener
      if (onDisplayCursorListener != null) {
        onDisplayCursorListener.onCursorChanged(this,getDisplayFrom(), getDisplayNumber());
      }
    }
  }


  /*
   * (non-Javadoc)
   *  
   * @see cn.limc.androidcharts.view.StickChart#zoomOut()
   */
  @Override
  public void zoomOut() {
    if (getDisplayNumber() < stickData.size() - 1) {
      if (getDisplayNumber() + ZOOM_STEP > stickData.size() - 1) {
        setDisplayNumber(stickData.size() - 1);
        setDisplayFrom(0);
      } else {
        // ????????
        if (zoomBaseLine == ZOOM_BASE_LINE_CENTER) {
          setDisplayNumber(getDisplayNumber() + ZOOM_STEP);
          if (getDisplayFrom() > 1) {
            setDisplayFrom(getDisplayFrom() - ZOOM_STEP / 2);
          } else {
            setDisplayFrom(0);
          }
        } else if (zoomBaseLine == ZOOM_BASE_LINE_LEFT) {
          setDisplayNumber(getDisplayNumber() + ZOOM_STEP);
        } else if (zoomBaseLine == ZOOM_BASE_LINE_RIGHT) {
          setDisplayNumber(getDisplayNumber() + ZOOM_STEP);
          if (getDisplayFrom() > ZOOM_STEP) {
            setDisplayFrom(getDisplayFrom() - ZOOM_STEP);
          } else {
            setDisplayFrom(0);
          }
        }
      }

      if (getDisplayTo() >= stickData.size()) {
        setDisplayNumber(stickData.size() - getDisplayFrom());
      }

      this.postInvalidate();
      
      //Listener
      if (onDisplayCursorListener != null) {
        onDisplayCursorListener.onCursorChanged(this,getDisplayFrom(), getDisplayNumber());
      }
    }
  }


  /*
   * (non-Javadoc)
   * 
   * @return 
   * @see cn.limc.androidcharts.view.StickChart#getDisplayFrom()
   */
  @Override
  public int getDisplayFrom() {
    return displayFrom;
  }


  /*
   * (non-Javadoc)
   * 
   * @param displayFrom 
   * @see cn.limc.androidcharts.view.StickChart#setDisplayFrom(int)
   */
  @Override
  public void setDisplayFrom(int displayFrom) {
    this.displayFrom = displayFrom;
  }


  /*
   * (non-Javadoc)
   * 
   * @return 
   * @see cn.limc.androidcharts.view.StickChart#getDisplayTo()
   */
  @Override
  public int getDisplayTo() {
    return displayFrom + displayNumber;
  }

  /*
   * (non-Javadoc)
   * 
   * @param displayTo 
   * @see cn.limc.androidcharts.view.StickChart#setDisplayTo(int)
   */
  @Override
  public void setDisplayTo(int displayTo) {
    // TODO
  }

  /*
   * (non-Javadoc)
   * 
   * @return 
   * @see cn.limc.androidcharts.view.StickChart#getDisplayNumber()
   */
  @Override
  public int getDisplayNumber() {
    return displayNumber;
  }

  /*
   * (non-Javadoc)
   * 
   * @param displayNumber 
   * @see cn.limc.androidcharts.view.StickChart#setDisplayNumber(int)
   */
  @Override
  public void setDisplayNumber(int displayNumber) {
    this.displayNumber = displayNumber;
  }

  /*
   * (non-Javadoc)
   * 
   * @return 
   * @see cn.limc.androidcharts.view.StickChart#getMinDisplayNumber()
   */
  @Override
  public int getMinDisplayNumber() {
    return minDisplayNumber;
  }

  /*
   * (non-Javadoc)
   * 
   * @param minDisplayNumber 
   * @see cn.limc.androidcharts.view.StickChart#setMinDisplayNumber(int)
   */
  @Override
  public void setMinDisplayNumber(int minDisplayNumber) {
    this.minDisplayNumber = minDisplayNumber;
  }

  
  /**
   * @return the zoomBaseLine
   */
  public int getZoomBaseLine() {
    return zoomBaseLine;
  }

  /**
   * @param zoomBaseLine
   *            the zoomBaseLine to set
   */
  public void setZoomBaseLine(int zoomBaseLine) {
    this.zoomBaseLine = zoomBaseLine;
  }

  /* (non-Javadoc)
   * 
   * @param listener 
   * @see cn.limc.androidcharts.event.ISlipable#setOnSlipGestureListener(cn.limc.androidcharts.event.OnSlipGestureListener) 
   */
  public void setOnSlipGestureListener(OnSlipGestureListener listener) {
    this.onSlipGestureListener = listener;
    
  }

  /* (non-Javadoc)
   * 
   * @return 
   * @see cn.limc.androidcharts.event.ISlipable#getOnSlipGestureListener() 
   */
  public OnSlipGestureListener getOnSlipGestureListener() {
     return onSlipGestureListener;
  }  
}




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