2016-07-25 2 views
1

Привет, я использую библиотеку https://github.com/limccn/Android-Charts для отображения текущих данных на графике в приложении для Android. Я использую CandleStick Chart этой библиотеки. все работает нормально, за исключением того, что я не могу показать подсказку инструмента при наведении указателя мыши на любую свечную палочку внутри диаграммы для отображения данных. Я использую ниже код для инициализации диаграммы. кто-нибудь знает, как показать подсказку инструмента или как мы можем прикрепить любое представление, когда пользователь нажимает на любую палочку диаграммы.Android-диаграммы - диаграмма CandleStick

private void initChart() { 
     for (int i = 0; i < chartData.size(); i++) { 
      //OHLCEntity(double open, double high, double low, double close, int date) 
      ChartData chartdata = chartData.get(i); 
      String dateString = chartdata.getT_Time().substring(0, chartdata.getT_Time().lastIndexOf("T")); 
      String timeString = chartdata.getT_Time().substring(chartdata.getT_Time().lastIndexOf("T") + 1, chartdata.getT_Time().toString().length()); 
      Pattern p = Pattern.compile(":"); 
      String[] times = p.split(timeString); 
      String dateValue = ""; 
      if (times.length >= 3) { 
       dateValue = dateString.replaceAll("-", "").trim().toString() + times[0].trim().toString() + "" + times[1].toString().trim(); 
      } else { 
       dateValue = dateString.replaceAll("-", "").trim().toString(); 
      } 
      ohlc.add(new OHLCEntity(chartdata.getT_Open(), chartdata.getHigh(), chartdata.getLow(), chartdata.getT_Close(), Integer.valueOf(dateValue))); 
     } 
     ChartData maxds = Collections.max(chartData, new ChartComparator()); 
     candlestickchart.setAxisXColor(Color.LTGRAY); 
     candlestickchart.setAxisYColor(Color.LTGRAY); 
     candlestickchart.setLatitudeColor(Color.GRAY); 
     candlestickchart.setLongitudeColor(Color.GRAY); 
     candlestickchart.setBorderColor(Color.LTGRAY); 
     candlestickchart.setLongitudeFontColor(Color.WHITE); 
     candlestickchart.setLatitudeFontColor(Color.WHITE); 
     // 最大显示足数 
     candlestickchart.setMaxSticksNum(chartData.size()); 
     // 最大纬线数 
//  candlestickchart.setLatitudeNum(5); 
//  // 最大经线数 
//  candlestickchart.setLongitudeNum(3); 
     // 最大价格 
     candlestickchart.setMaxValue(maxds.getVolume()); 
     // 最小价格 
     int minIndex = chartData.indexOf(Collections.min(chartData, new ChartComparator())); 
     candlestickchart.setMinValue(chartData.get(minIndex).getVolume()); 

     candlestickchart.setDisplayLongitudeTitle(true); 
     candlestickchart.setDisplayLatitudeTitle(true); 
     candlestickchart.setDisplayLatitude(true); 
     candlestickchart.setDisplayLongitude(true); 
     candlestickchart.setBackgroundColor(Color.BLACK); 

     candlestickchart.setDataQuadrantPaddingTop(5); 
     candlestickchart.setDataQuadrantPaddingBottom(5); 
     candlestickchart.setDataQuadrantPaddingLeft(5); 
     candlestickchart.setDataQuadrantPaddingRight(5); 
//  candlestickchart.setAxisYTitleQuadrantWidth(50); 
//  candlestickchart.setAxisXTitleQuadrantHeight(20); 
     candlestickchart.setAxisXPosition(Axis.AXIS_X_POSITION_BOTTOM); 
     candlestickchart.setAxisYPosition(Axis.AXIS_Y_POSITION_RIGHT); 
     // 为chart2增加均线 
     candlestickchart.setStickData(new ListChartData<IStickEntity>(ohlc)); 
     candlestickchart.setOnDisplayCursorListener(new IDisplayCursorListener() { 
      public void onCursorChanged(IDataCursor dataCursor, int displayFrom, 
             int displayNumber) { 
       candlestickchart.setDisplayFrom(displayFrom); 
       candlestickchart.setDisplayNumber(displayNumber); 
       candlestickchart.postInvalidate(); 
      } 
     }); 

     candlestickchart.setOnTouchGestureListener(new OnTouchGestureListener() { 

      /* (non-Javadoc) 
      * 
      * @param touchable 
      * @param event 
      * @see cn.limc.androidcharts.event.OnTouchGestureListener#onTouchDown(cn.limc.androidcharts.event.ITouchable, android.view.MotionEvent) 
      */ 
      @Override 
      public void onTouchDown(ITouchable touchable, MotionEvent event) { 
       super.onTouchDown(touchable, event); 
       candlestickchart.touchDown(new PointF(event.getX(), event.getY())); 
      } 

      /* (non-Javadoc) 
      * 
      * @param touchable 
      * @param event 
      * @see cn.limc.androidcharts.event.OnTouchGestureListener#onTouchMoved(cn.limc.androidcharts.event.ITouchable, android.view.MotionEvent) 
      */ 
      @Override 
      public void onTouchMoved(ITouchable touchable, MotionEvent event) { 
       super.onTouchMoved(touchable, event); 
       candlestickchart.touchMoved(new PointF(event.getX(), event.getY())); 
      } 

      /* (non-Javadoc) 
      * 
      * @param touchable 
      * @param event 
      * @see cn.limc.androidcharts.event.OnTouchGestureListener#onTouchUp(cn.limc.androidcharts.event.ITouchable, android.view.MotionEvent) 
      */ 
      @Override 
      public void onTouchUp(ITouchable touchable, MotionEvent event) { 
       super.onTouchUp(touchable, event); 
       candlestickchart.touchUp(new PointF(event.getX(), event.getY())); 
      } 
     }); 

     candlestickchart.setAutoCalcValueRange(true); 
     candlestickchart.setDisplayCrossXOnTouch(true); 
     candlestickchart.setDisplayCrossYOnTouch(true); 
    } 

ответ

0

Если вы хотите, чтобы получить выбранный индекс данных палки, вы можете использовать:

public int getSelectedIndex() 

Если вы хотите получить прикоснулся Point, вы можете использовать:

  1. Внутри setOnTouchGestureListener:

    public void onTouchMoved(ITouchable touchable, MotionEvent event){ 
        new PointF(event.getX(), event.getY()) 
    } 
    
  2. Вне setOnTouchGestureListener (активность, фрагмент, ViewGroup):

    public PointF getTouchPoint() 
    

Для больше функций поддерживает, выберите SlipCandleStickChart.

Смежные вопросы