2016-07-25 8 views
1

Hallo ich verwende https://github.com/limccn/Android-Charts Bibliothek für die Anzeige von Live-Daten auf dem Diagramm in meiner Android-App. Ich benutze CandleStick Chart dieser Bibliothek. Alles funktioniert gut außer eine Sache ist, dass ich nicht in der Lage bin, Tooltip zu zeigen, wenn die Maus über irgendeinen Candlestick innerhalb des Diagramms für Anzeigedaten bewegt wird. Ich verwende den folgenden Code für die Initialisierung des Diagramms. Weiß jemand, wie man den Tooltip zeigt oder wie man irgendeine Ansicht anhängen kann, wenn der Benutzer die Maus über irgendeinen Stock des Diagramms bewegt.Android-Charts - CandleStick Chart

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); 
    } 

Antwort

0

Wenn Sie den ausgewählten Stick Datenindex erhalten möchten, können Sie:

public int getSelectedIndex() 

Wenn Sie das berührt Punkt erhalten möchten, können Sie:

  1. Innen setOnTouchGestureListener:

  2. Außerhalb setOnTouchGestureListener (Aktivität, Fragment, Viewgroup):

    public PointF getTouchPoint() 
    

Weitere Funktionen unterstützt, wählen SlipCandleStickChart.