2014-02-28 16 views
1

我已經使用achartengine,可以平移,縮放等。Android acharengine - 只要數據點不在可見區域,圖形就會消失?

最初圖表在平底鍋上消失。

我得到的OpenGl呈現警告 - 路徑太大,無法渲染成紋理

我把硬件加速轉爲假,解決了問題。

現在,當我放大圖形,並且數據點超出可見區域時,圖形類型消失,並將軸設置爲0000-0-0000。

請參考附件截圖。

時的點是在可見光區域: -

When the points are in the visible region

正如我放大點超出可見光區: -

As I zoom the points go beyond the visible region

這是的問題圖書館。 如果是的話,任何人有任何解決方案?

編輯:----

下面是一些代碼:

 mRenderer.setApplyBackgroundColor(true); 
    mRenderer.setBackgroundColor(Color.WHITE); 
    mRenderer.setMarginsColor(Color.WHITE); 
    mRenderer.setAxisTitleTextSize(16); 
    mRenderer.setChartTitleTextSize(20); 
    mRenderer.setLabelsTextSize(15); 
    mRenderer.setLegendTextSize(15); 
    mRenderer.setZoomButtonsVisible(false); 
    mRenderer.setPointSize(8); 
if (mChartView == null) { 
     layout = (RelativeLayout) findViewById(R.id.chart); 
     leftDate = (TextView) findViewById(R.id.left_date); 
     rightDate = (TextView) findViewById(R.id.right_date); 

     layout.setEnabled(true); 
     mChartView = ChartFactory.getLineChartView(this, mDataset, 
       mRenderer); 
     // enable the chart click events 
     mRenderer.setClickEnabled(true); 
     mRenderer.setSelectableBuffer(10); 
     String seriesTitle = "Series " + (mDataset.getSeriesCount() + 1); 
     // create a new series of data 
     XYSeries series = new XYSeries(seriesTitle); 
     mDataset.addSeries(series); 
     mCurrentSeries = series; 
     // create a new renderer for the new series 
     XYSeriesRenderer renderer = new XYSeriesRenderer(); 
     renderer.setColor(Color.BLACK); 
     renderer.setPointStyle(PointStyle.CIRCLE); 
     renderer.setPointStrokeWidth(5); 
     renderer.setShowLegendItem(false); 
     renderer.setFillPoints(true); 
     renderer.setFillBelowLine(true); 
     renderer.setFillBelowLineColor(getResources().getColor(
       R.color.graph_green)); 
     renderer.setFillPoints(true); 
     renderer.setDisplayChartValuesDistance(20); 
     mRenderer.addSeriesRenderer(renderer); 
     // set some renderer properties 

     mCurrentRenderer = renderer; 
     mRenderer.setAxisTitleTextSize(16); 
     // mRenderer.setChartTitleTextSize(20); 
     // mRenderer.setLabelsTextSize(15); 
     // mRenderer.setLegendTextSize(15); 
     mRenderer.setPanEnabled(true, false); 
     mRenderer.setYAxisAlign(Align.LEFT, 0); 
     mRenderer.setYLabelsAlign(Align.RIGHT, 0); 
     mRenderer.setXLabelsColor(Color.WHITE); 
     mRenderer.setApplyBackgroundColor(true); 
     mRenderer.setBackgroundColor(Color.WHITE); 
     mRenderer.setMarginsColor(Color.WHITE); 
     mRenderer.setPointSize(8f); 
     mRenderer.setAxesColor(Color.GRAY); 
     mRenderer.setLabelsColor(Color.BLACK); 
     try { 
      FetchWeight fetchWeight = FetchWeightCacheManager 
        .getObject(Controller.getAppBackgroundContext()); 
      if (fetchWeight.getData().size() != 0) { 
       for (int i = 0; i < fetchWeight.getData().size(); i++) { 
        kilo = (long) fetchWeight.getData().get(i).getKilos(); 
        weight_date = (long) fetchWeight.getData().get(i) 
          .getTimestamp(); 
        if (count == 0) { 
         default_start_date = weight_date - 100000; 
         System.out.println("default start date = " 
           + default_start_date); 
         mCurrentSeries.add(default_start_date, kilo); 
         weights.add(kilo); 
         dates.add(default_start_date); 
         count++; 
        } 
        System.out.println("time:" + weight_date); 
        System.out.println("kilo:" + kilo); 
        mCurrentSeries.add(weight_date, kilo); 
        weights.add(kilo); 
        dates.add(weight_date); 

       } 
      } 
     } catch (Exception e) { 
      System.out.println("No weights to fetch :" + e); 
     } 
     double minx = mRenderer.getXAxisMin(); 
     double maxx = mRenderer.getXAxisMax(); 
     System.out.println("min x = " + minx); 
     System.out.println("max x = " + maxx); 
     mRenderer.setRange(new double[] { default_start_date, 
       weight_date + 1000000, kilo - 20, kilo + 20 }); 
     mY.setText(""); 
     // repaint the chart such as the newly added point to be visible 
     mChartView.repaint(); 

這裏是泛聽衆:

  mChartView.addPanListener(new PanListener() { 

      private double timestampdouble; 
      private Integer image_index; 
      private int mid_value; 
      private Double max_double; 
      private Double min_double; 

      public void panApplied() { 
       // customListAdapter.setGraphTouched(true); 

       ArrayList<Long> insideweights = new ArrayList<Long>(); 
       double minx = mRenderer.getXAxisMin(); 
       double maxx = mRenderer.getXAxisMax(); 
       long minx_default = (long) minx; 
       long maxx_default = (long) maxx; 
       // change UI onscrollview minx & maxx 
       leftDate.setText("" + getDateFormat(minx_default)); 
       rightDate.setText("" + getDateFormat(maxx_default)); 
       new AsyncScroll(minx_default, maxx_default).execute(); 
       double getmax_weight = get_max_weight(); 
       double getmin_weight = get_min_weight(); 
       if (minx_default <= default_start_date) { 
        mRenderer.setRange(new double[] { default_start_date, 
          maxx, getmin_weight - 20, getmax_weight + 20 }); 

       } else { 
        mRenderer.setRange(new double[] { minx, maxx, 
          getmin_weight - 20, getmax_weight + 20 }); 
       } 



      } 

get_max_weights/get_min_weight得到的Y分和最高分軸,我正在使用它們來渲染圖形。

這是一個令人困惑的代碼,但我不能在這裏發佈整個代碼。

+0

你能添加什麼都沒有做? – keshav

+0

已編輯!這是一個很大的代碼,所以不能在這裏發佈一切。 – ashishashen

回答

4

setFillBelowLinesetFillBelowLineColor已棄用。

嘗試

FillOutsideLine fill = new FillOutsideLine(FillOutsideLine.Type.BOUNDS_ABOVE); 
    fill.setColor(Color.GREEN); 
    renderer.addFillOutsideLine(fill); 
+0

只要我嘗試以沒有點可見的方式平移它,它就會拋出indexoutofboundsException。 – ashishashen

+0

嘿解決了它。我試圖搜索最小y點和最大y點,並試圖相應地呈現圖。所以當我無法找到它時,圖形無法正確渲染。只是做了一個如果其他和它的工作..感謝提示btw – ashishashen

0

我試圖尋找最小和最大Y數據點和渲染圖。

所以,當點超出了可見的原因,圖形無法呈現。

所以這裏是我添加的小代碼。

double minx = mRenderer.getXAxisMin(); 
    double maxx = mRenderer.getXAxisMax(); 
    double miny = mRenderer.getYAxisMin(); 
    double maxy = mRenderer.getYAxisMax(); 
    double getmax_weight = get_max_weight(); 
    double getmin_weight = get_min_weight(); 
    if (getmax_weight < 0) { 
    mRenderer.setRange(new double[] { minx, maxx,miny, maxy }); 
    } else { 
     if (minx_default <= default_start_date) { 
     mRenderer.setRange(new double[] {default_start_date,       maxx,getmin_weight - 20, 
             getmax_weight + 20 }); 

          } else { 
           mRenderer.setRange(new double[] { minx, 
             maxx, getmin_weight - 20, 
             getmax_weight + 20 }); 
          } 
         } 
        } 
相關問題