2013-05-21 146 views
0

我想重新繪製我的圖表,每次我選擇m適配器之一,第一次是繪製的圖形看起來很完美,但是當我去選擇一個並回來看起來像它繪製兩倍相同的圖表。achartengine:如何重繪/重繪圖表

這是我的源代碼:

public class MainActivity extends Activity { 

    private Button btnConnect; 
    private Spinner spnTime; 

    private String[] durationData = new String[]{ 
     "Pilih Durasi", 
     "1 Minggu", 
     "1 Bulan", 
     "3 Bulan", 
     "9 Bulan", 
     "12 Bulan" 
    }; 

    int period = 0; 

    private LinearLayout lnChart; 

    private ProgressDialog dialog; 

    public String baseURL = "http://www.abcj.com/i="; 

    private ArrayList<DataItem> listData; 


    //CHART VARIABLES 

    public static final String TYPE = "type"; 

    private XYMultipleSeriesDataset mDataset = new XYMultipleSeriesDataset(); 

    private XYMultipleSeriesRenderer mRenderer = new XYMultipleSeriesRenderer(); 

    private XYSeries mCurrentSeries; 

    private XYSeriesRenderer mCurrentRenderer; 

    private String mDateFormat; 

    private GraphicalView mChartView; 

    private int index = 0; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     btnConnect = (Button)findViewById(R.id.btnDownloadChartData); 
     spnTime = (Spinner)findViewById(R.id.spOptDuration); 

     listData = new ArrayList<DataItem>(); 

     //CHART INITIATION 

     mRenderer.setApplyBackgroundColor(true); 
     mRenderer.setBackgroundColor(Color.argb(100, 50, 50, 50)); 
     mRenderer.setAxisTitleTextSize(16); 
     mRenderer.setChartTitleTextSize(20); 
     mRenderer.setLabelsTextSize(15); 
     mRenderer.setLegendTextSize(15); 
     mRenderer.setMargins(new int[] { 20, 30, 15, 0 }); 
     mRenderer.setZoomButtonsVisible(true); 
     mRenderer.setPointSize(10); 

     btnConnect.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       // TODO Auto-generated method stub 


     ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, 
       android.R.layout.simple_dropdown_item_1line, durationData); 

     spnTime.setAdapter(adapter); 

     spnTime.setOnItemSelectedListener(new OnItemSelectedListener() { 

      @Override 
      public void onItemSelected(AdapterView<?> arg0, View arg1, 
        int arg2, long arg3) { 
       // TODO Auto-generated method stub 
       switch (arg2+1) { 
        case 0: 
        break; 
        case 1: 
         period = 7; 
        break; 

        case 2: 
         period = 30; 
        break; 

        case 3: 
         period = 90; 
        break; 

        case 4: 
         period = 180; 
        break; 

        case 5: 
         period = 360; 
        break; 
       default: 
        break; 
       } 

       new LoadData(baseURL+period).execute(); 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> arg0) { 
       // TODO Auto-generated method stub 

      } 
     }); 

     } 
}); 
    } 

    @SuppressLint("ShowToast") 
    @Override 
    protected void onResume() { 
     // TODO Auto-generated method stub 
     super.onResume(); 

     if (mChartView == null) { 
      lnChart = (LinearLayout) findViewById(R.id.chart); 
       mChartView = ChartFactory.getLineChartView(this, mDataset, mRenderer); 
       mRenderer.setClickEnabled(true); 
       mRenderer.setSelectableBuffer(100); 
       mChartView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
        double[] xy = mChartView.toRealPoint(0); 
        if (seriesSelection == null) { 
        Toast.makeText(MainActivity.this, "No chart element was clicked", Toast.LENGTH_SHORT) 
         .show(); 
        } 
       } 
       }); 
       mChartView.setOnLongClickListener(new View.OnLongClickListener() { 
       @SuppressLint("ShowToast") 
       @Override 
       public boolean onLongClick(View v) { 
        SeriesSelection seriesSelection = mChartView.getCurrentSeriesAndPoint(); 
        if (seriesSelection == null) { 
        Toast.makeText(MainActivity.this, "No chart element was long pressed", 
         Toast.LENGTH_SHORT); 
        return false; // no chart element was long pressed, so let something 
        // else handle the event 
        } else { 
        Toast.makeText(MainActivity.this, "Chart element in series index " 
         + seriesSelection.getSeriesIndex() + " data point index " 
         + seriesSelection.getPointIndex() + " was long pressed", Toast.LENGTH_SHORT); 
        return true; // the element was long pressed - the event has been 
        // handled 
        } 
       } 
       }); 
       mChartView.addZoomListener(new ZoomListener() { 
       public void zoomApplied(ZoomEvent e) { 
        String type = "out"; 
        if (e.isZoomIn()) { 
        type = "in"; 
        } 
        System.out.println("Zoom " + type + " rate " + e.getZoomRate()); 
       } 

       public void zoomReset() { 
        System.out.println("Reset"); 
       } 
       }, true, true); 
       mChartView.addPanListener(new PanListener() { 
       public void panApplied() { 
        System.out.println("New X range=[" + mRenderer.getXAxisMin() + ", " + mRenderer.getXAxisMax() 
         + "], Y range=[" + mRenderer.getYAxisMax() + ", " + mRenderer.getYAxisMax() + "]"); 
       } 
       }); 
       lnChart.removeAllViews(); 
       lnChart.addView(mChartView, new LayoutParams(LayoutParams.FILL_PARENT, 
        LayoutParams.FILL_PARENT)); 
      } else { 
       mChartView.repaint(); 
      } 
    } 

    private class LoadData extends AsyncTask<Void, Void, String>{ 

     String url = ""; 

     public LoadData(String url) { 
      // TODO Auto-generated constructor stub 
      this.url = url; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 

      dialog = ProgressDialog.show(MainActivity.this, "", "Please wait"); 
     } 

     @Override 
     protected String doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      String result = ""; 
      try { 
       result = Connection.get(url); 
      } catch (Exception e) { 
       // TODO: handle exception 
       result = ""; 
       Log.d("TEST CHART", e.getMessage()); 
      } 

      return result; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      // TODO Auto-generated method stub 
      super.onPostExecute(result); 

      fetchResponse(result.replace("\n", "").trim()); 

      dialog.dismiss(); 
     } 

    } 

    private void fetchResponse(String result) { 
     // TODO Auto-generated method stub 
     if (!result.equals("")) { 
      try { 
       JSONArray jsonArray = new JSONArray(result); 
       DataItem item = null; 

       for (int i = 1; i < jsonArray.length(); i++) { 

        JSONObject jsonObject = jsonArray.getJSONObject(i); 

        item = new DataItem(jsonObject.optString("lji_invest"), 
          jsonObject.optDouble("persen_hmin1"), 
          jsonObject.optDouble("lnu_nilai"), 
          jsonObject.optDouble("selisih"), 
          jsonObject.optString("lji_id"), 
          jsonObject.optString("tanggal")); 

        listData.add(item); 
       } 

       renderChart(listData); 

      } catch (Exception e) { 
       Log.d("TEST CHART", e.getMessage()); 
      } 
     } 
    } 

    private void renderChart(ArrayList<DataItem> listData) { 
     // TODO Auto-generated method stub 

     String seriesTitle = "Series Data"; 
     XYSeries series = new XYSeries(seriesTitle); 
     mDataset.addSeries(series); 
     mCurrentSeries = series; 
     XYSeriesRenderer renderer = new XYSeriesRenderer(); 
     mRenderer.addSeriesRenderer(renderer); 

     renderer.setFillPoints(true); 

     mCurrentRenderer = renderer; 

     for (int i = 0; i < listData.size(); i++) { 
      mCurrentSeries.add(listData.get(i).getInuNilai(), 
        listData.get(i).getPersenHmint1()); 
     } 

     if (mChartView != null) { 
       mChartView.repaint(); 
      } 

    } 

    @Override 
     protected void onRestoreInstanceState(Bundle savedState) { 
     super.onRestoreInstanceState(savedState); 
     mDataset = (XYMultipleSeriesDataset) savedState.getSerializable("dataset"); 
     mRenderer = (XYMultipleSeriesRenderer) savedState.getSerializable("renderer"); 
     mCurrentSeries = (XYSeries) savedState.getSerializable("current_series"); 
     mCurrentRenderer = (XYSeriesRenderer) savedState.getSerializable("current_renderer"); 
     mDateFormat = savedState.getString("date_format"); 
     } 

     @Override 
     protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putSerializable("dataset", mDataset); 
     outState.putSerializable("renderer", mRenderer); 
     outState.putSerializable("current_series", mCurrentSeries); 
     outState.putSerializable("current_renderer", mCurrentRenderer); 
     outState.putString("date_format", mDateFormat); 
     } 

所以如何重繪我的圖表?我希望有人能告訴我我的錯在哪裏,並告訴我修理方法

回答

0

難以理解的問題,但我會嘗試猜測。

爲了重新繪製的圖表中,你需要調用由具有mRenderer.setInScroll(true);呼叫chartView.repaint();

但是,你有問題可以是固定的。

+0

對不起我的英語不好 - 「,所以這是我的解釋: 我有我的微調適配器繪製圖表的5值,當我想要從一個值更改爲其他值在微調,在我的圖表中有重複...如何解決它..? –

0

我使用此代碼

if(layout != null) 
     layout.removeAllViews();  
layout.addView(mChartView, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));   
    mChartView = null; 
+0

對我來說它不工作... TT –

1

使用chartView.removeView(Graphical_View)

設置圖表視圖用新值之前,接着使用 'Graphical_View.repaint()' 解決售後服務這個問題序以設置新的值

但是使用multirenderer.setInScroll(true);