/*
   * (non-Javadoc)
   *
   * @param value
   *
   * @see
   * cn.limc.androidcharts.event.ITouchEventResponse#notifyEvent(GridChart)
   */
  @Override
  public void notifyEvent(GridChart chart) {
    // CandleStickChart candlechart = (CandleStickChart) chart;
    // this. = candlechart.getMaxSticksNum();

    super.setDisplayCrossYOnTouch(false);
    // notifyEvent
    super.notifyEvent(chart);
    // notifyEventAll
    super.notifyEventAll(this);
  }
  /**
   * initialize degrees on Y axis
   *
   * <p>Y軸の目盛を初期化
   *
   * <p>初始化Y轴的坐标值
   */
  protected void initAxisY() {
    this.calcValueRange();
    List<String> titleY = new ArrayList<String>();
    double average = (maxValue - minValue) / this.getLatitudeNum();

    // calculate degrees on Y axis
    for (int i = 0; i < this.getLatitudeNum(); i++) {
      String value = formatAxisYDegree(minValue + i * average);
      // padding space
      if (value.length() < super.getLatitudeMaxTitleLength()) {
        while (value.length() < super.getLatitudeMaxTitleLength()) {
          value = " " + value;
        }
      }
      titleY.add(value);
    }
    // calculate last degrees by use max value
    String value = formatAxisYDegree(maxValue);
    // padding space
    if (value.length() < super.getLatitudeMaxTitleLength()) {
      while (value.length() < super.getLatitudeMaxTitleLength()) {
        value = " " + value;
      }
    }
    titleY.add(value);

    super.setLatitudeTitles(titleY);
  }
示例#3
0
  /**
   * initialize degrees on Y axis
   *
   * <p>Y軸の目盛を初期化
   *
   * <p>初始化Y轴的坐标值
   */
  protected void initAxisY() {
    List<String> TitleY = new ArrayList<String>();
    float average = (int) ((maxValue - minValue) / this.getLatitudeNum()) / 100 * 100;
    ;
    // calculate degrees on Y axis
    for (int i = 0; i < this.getLatitudeNum(); i++) {
      String value = String.valueOf((int) Math.floor(minValue + i * average));
      if (value.length() < super.getAxisYMaxTitleLength()) {
        while (value.length() < super.getAxisYMaxTitleLength()) {
          value = new String(" ") + value;
        }
      }
      TitleY.add(value);
    }
    // calculate last degrees by use max value
    String value = String.valueOf((int) Math.floor(((int) maxValue) / 100 * 100));
    if (value.length() < super.getAxisYMaxTitleLength()) {
      while (value.length() < super.getAxisYMaxTitleLength()) {
        value = new String(" ") + value;
      }
    }
    TitleY.add(value);

    super.setAxisYTitles(TitleY);
  }
示例#4
0
  /*
   * (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) {
    initAxisY();
    initAxisX();
    super.onDraw(canvas);

    drawSticks(canvas);
  }
  /*
   * (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) {
    if (this.autoCalcValueRange) {
      calcValueRange();
    }
    initAxisY();
    initAxisX();
    super.onDraw(canvas);

    drawSticks(canvas);
  }
示例#6
0
 /**
  * initialize degrees on Y axis
  *
  * <p>Y軸の目盛を初期化
  *
  * <p>初始化Y轴的坐标值
  */
 protected void initAxisX() {
   List<String> TitleX = new ArrayList<String>();
   if (null != StickData) {
     float average = maxSticksNum / this.getLongitudeNum();
     for (int i = 0; i < this.getLongitudeNum(); i++) {
       int index = (int) Math.floor(i * average);
       if (index > maxSticksNum - 1) {
         index = maxSticksNum - 1;
       }
       TitleX.add(String.valueOf(StickData.get(index).getDate()).substring(4));
     }
     TitleX.add(String.valueOf(StickData.get(maxSticksNum - 1).getDate()).substring(4));
   }
   super.setAxisXTitles(TitleX);
 }
 /**
  * initialize degrees on Y axis
  *
  * <p>Y軸の目盛を初期化
  *
  * <p>初始化Y轴的坐标值
  */
 protected void initAxisX() {
   List<String> titleX = new ArrayList<String>();
   if (null != stickData && stickData.size() > 0) {
     float average = displayNumber / this.getLongitudeNum();
     for (int i = 0; i < this.getLongitudeNum(); i++) {
       int index = (int) Math.floor(i * average);
       if (index > displayNumber - 1) {
         index = displayNumber - 1;
       }
       index = index + displayFrom;
       titleX.add(formatAxisXDegree(stickData.get(index).getDate()));
     }
     titleX.add(formatAxisXDegree(stickData.get(displayFrom + displayNumber - 1).getDate()));
   }
   super.setLongitudeTitles(titleX);
 }
 /**
  * add a new stick data to sticks and refresh this chart
  *
  * <p>新しいスティックデータを追加する,フラフをレフレシューする
  *
  * <p>追加一条新数据并刷新当前图表
  *
  * @param entity
  *     <p>data
  *     <p>データ
  *     <p>新数据
  */
 public void pushData(StickEntity entity) {
   if (null != entity) {
     addData(entity);
     super.postInvalidate();
   }
 }
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    // valid
    if (!isValidTouchPoint(event.getX(), event.getY())) {
      return false;
    }

    if (null == stickData || stickData.size() == 0) {
      return false;
    }

    final float MIN_LENGTH = (super.getWidth() / 40) < 5 ? 5 : (super.getWidth() / 50);

    switch (event.getAction() & MotionEvent.ACTION_MASK) {
        // 设置拖拉模式
      case MotionEvent.ACTION_DOWN:
        touchMode = TOUCH_MODE_SINGLE;
        if (event.getPointerCount() == 1) {
          touchPoint = new PointF(event.getX(), event.getY());
          fixTouchPoint();
          if (onTouchGestureListener != null) {
            onTouchGestureListener.onTouchDown(touchPoint, getSelectedIndex());
          }
          super.postInvalidate();
          // Notifier
          super.notifyEventAll(this);
        }
        break;
      case MotionEvent.ACTION_UP:
        touchMode = TOUCH_MODE_NONE;
        startPointA = null;
        startPointB = null;
        if (event.getPointerCount() == 1) {
          touchPoint = new PointF(event.getX(), event.getY());
          fixTouchPoint();
          if (onTouchGestureListener != null) {
            onTouchGestureListener.onTouchUp(touchPoint, getSelectedIndex());
          }
          super.postInvalidate();
          // Notifier
          super.notifyEventAll(this);
        }
        break;
      case MotionEvent.ACTION_POINTER_UP:
        touchMode = TOUCH_MODE_NONE;
        startPointA = null;
        startPointB = null;
        return super.onTouchEvent(event);
        // 设置多点触摸模式
      case MotionEvent.ACTION_POINTER_DOWN:
        olddistance = calcDistance(event);
        if (olddistance > MIN_LENGTH) {
          touchMode = TOUCH_MODE_MULTI;
          startPointA = new PointF(event.getX(0), event.getY(0));
          startPointB = new PointF(event.getX(1), event.getY(1));
        }
        break;
      case MotionEvent.ACTION_MOVE:
        if (touchMode == TOUCH_MODE_MULTI) {
          newdistance = calcDistance(event);
          if (newdistance > MIN_LENGTH) {
            //					if (startPointA.x >= event.getX(0)
            //							&& startPointB.x >= event.getX(1)) {
            //						moveRight();
            //					} else if (startPointA.x <= event.getX(0)
            //							&& startPointB.x <= event.getX(1)) {
            //						moveLeft();
            //					} else {
            if (Math.abs(newdistance - olddistance) > MIN_LENGTH) {
              if (newdistance > olddistance) {
                zoomIn();
              } else {
                zoomOut();
              }
              // 重置距离
              olddistance = newdistance;
            }
            //					}
            startPointA = new PointF(event.getX(0), event.getY(0));
            startPointB = new PointF(event.getX(1), event.getY(1));

            super.postInvalidate();
            super.notifyEventAll(this);
          }
        } else {
          // 单点拖动效果
          if (event.getPointerCount() == 1) {
            float moveXdistance = Math.abs(event.getX() - touchPoint.x);
            if (moveXdistance > MIN_LENGTH) {
              if (touchPoint.x - event.getX() > 0) {
                int startindex = getSelectedIndex();
                touchPoint = new PointF(event.getX(), event.getY());
                fixTouchPoint();
                if (onTouchGestureListener != null) {
                  onTouchGestureListener.onTouchMoved(touchPoint, TOUCH_MODE_SINGLE);
                }
                int gapindex = Math.abs(getSelectedIndex() - startindex);
                for (int i = 0; i < gapindex; i++) {
                  moveRight();
                }
              } else if (touchPoint.x - event.getX() < 0) {
                int startindex = getSelectedIndex();
                touchPoint = new PointF(event.getX(), event.getY());
                fixTouchPoint();
                if (onTouchGestureListener != null) {
                  onTouchGestureListener.onTouchMoved(touchPoint, TOUCH_MODE_SINGLE);
                }
                int gapindex = Math.abs(getSelectedIndex() - startindex);
                for (int i = 0; i < gapindex; i++) {
                  moveLeft();
                }
              }
            }
            super.postInvalidate();
            super.notifyEventAll(this);
          }
        }
        break;
    }
    return true;
  }