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