2016-07-25 2 views
1

안녕하세요 저는 https://github.com/limccn/Android-Charts 라이브러리를 사용하여 안드로이드 앱의 차트에 주식 실시간 데이터를 표시하고 있습니다. 이 라이브러리의 캔들 스틱 차트를 사용하고 있습니다. 한 가지를 제외하고는 모든 것이 잘 작동하고 있습니다. 디스플레이 데이터를 위해 차트 안쪽에 마우스를 올리면 마우스가 툴팁을 표시 할 수 없습니다. 차트를 초기화하기 위해 아래 코드를 사용하고 있습니다. 도구 팁을 표시하는 방법이나 차트의 막대 위에 사용자가 마우스를 올려 놓을 때 어떤보기를 첨부 할 수 있는지 알 수 있습니다. 선택한 스틱 데이터 인덱스를 얻고 싶은 경우에Android 차트 - 캔들 스틱 차트

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() 

을 당신이 감동 포인트를 얻고 싶은 경우에, 당신은 사용할 수 있습니다

  1. 내부 setOnTouchGestureListener :

    public void onTouchMoved(ITouchable touchable, MotionEvent event){ 
        new PointF(event.getX(), event.getY()) 
    } 
    
  2. 외부 setOnTouchGestureListener (활동, 조각, 뷰 그룹) : 더 많은 기능에 대한

    public PointF getTouchPoint() 
    

지원은 SlipCandleStickChart을 선택합니다.