Android-Charts - CandleStick Chart

时间:2016-07-25 10:50:43

标签: android android-studio charts

您好我正在使用https://github.com/limccn/Android-Charts库在我的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);
    }

1 个答案:

答案 0 :(得分:0)

如果您想获得所选的数据库索引,可以使用:

public int getSelectedIndex()

如果您想获得触摸点,可以使用:

  1. 在setOnTouchGestureListener中:

    public void onTouchMoved(ITouchable touchable, MotionEvent event){
        new PointF(event.getX(), event.getY())
    }
    
  2. 外部setOnTouchGestureListener(Activity,Fragment,ViewGroup):

    public PointF getTouchPoint() 
    
  3. 如需更多功能支持,请选择SlipCandleStickChart。