2017-05-30 37 views
0

我使用MPAndroidChart與水平條形圖之後重置。 我有查看端口偏移設置爲0,0,0,0但一旦我拖動值重置。MPAndroidChart - setViewPortOffsets(0,0,0,0)拖動

我該如何解決這個問題?

這似乎即使我消除失調MPAndroidChart阻力後仍調整窗口的大小。

enter image description here

enter image description here

public class FutureFragment extends Fragment { 

    private ProgressDialog progressDialog; 
    private ArrayList<Double> futureValues; 

    public FutureFragment() { 

    } 

    protected HorizontalBarChart mChart; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_four, container, false); 

     mChart = (HorizontalBarChart) v.findViewById(R.id.chart1); 
     mChart.getDescription().setEnabled(false); 
     mChart.setPinchZoom(false); 
     mChart.setDrawGridBackground(false); 
     mChart.setDoubleTapToZoomEnabled(false); 
     mChart.setHighlightPerTapEnabled(false); 

     XAxis xl = mChart.getXAxis(); 
     xl.setDrawAxisLine(false); 
     xl.setDrawGridLines(false); 

     YAxis yl = mChart.getAxisLeft(); 
     yl.setDrawAxisLine(false); 
     yl.setDrawGridLines(false); 
     yl.setAxisMinimum(0f); 

     YAxis yr = mChart.getAxisRight(); 
     yr.setDrawAxisLine(false); 
     yr.setDrawGridLines(false); 
     yr.setAxisMinimum(0f); 

     if (savedInstanceState == null) { 
      new PredictFuture().execute(); 
     } 

     return v; 
    } 

    private class PredictFuture extends AsyncTask<Void, Integer, Void> { 
     //Before running code in separate thread 
     @Override 
     protected void onPreExecute() { 
      progressDialog = ProgressDialog.show(getContext(), getString(R.string.future_asynctask_title), getString(R.string.future_asynctask_message), false, false); 
     } 

     //The code to be executed in a background thread. 
     @Override 
     protected Void doInBackground(Void... params) { 
      setData(); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      progressDialog.dismiss(); 

      mChart.setDragEnabled(true); 
      mChart.animateY(1000); 
      mChart.getLegend().setEnabled(false); 
      mChart.getAxisLeft().setDrawLabels(false); 
      mChart.getAxisRight().setDrawLabels(false); 

      final int pxHeight = mChart.getHeight(); 
      final int pxWidth = mChart.getWidth(); 

      mChart.getXAxis().setPosition(XAxis.XAxisPosition.TOP); 
      mChart.getXAxis().setXOffset(((getDp(pxWidth)) * -1) + 8); 

      // Set bar width to 50dp 
      float rows = getDp(pxHeight)/50; 
      float percent = futureValues.size()/rows; 

      mChart.setScaleMinima(1, percent); 
      mChart.getXAxis().setLabelCount((int)rows); 
      mChart.getXAxis().setTextSize(18); 
      mChart.getXAxis().setTypeface(Typeface.DEFAULT); 
      mChart.getXAxis().setTextColor(1979711488); 
      mChart.setViewPortOffsets (0f, 0f, 0f, 0f); 
      mChart.invalidate(); 
     } 
    } 

    private void setData() { 

     float barWidth = 0.9f; 
     ArrayList<BarEntry> yVals1 = new ArrayList<>(); 

     ArrayList<BillsArray> billValues = ((Bills)getActivity()).getBills(); 
     TopUpArray topUpValues = ((Bills)getActivity()).getTopUpValues(); 

     SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext()); 
     TimeZone timeZone = TimeZone.getTimeZone(preferences.getString(Splash.ZONE, "UTC")); 
     Future future = new Future(topUpValues, billValues, timeZone); 

     futureValues = future.getFutureValues(); 
     ArrayList<String> futureDates = future.getFutureDates(); 

     for (int i = 0; i < futureValues.size(); i++) { 
      float val = (float) (futureValues.get(i).doubleValue()); 
      yVals1.add(new BarEntry(i, val, futureDates.get(i))); 
     } 

     BarDataSet set1; 

     if (mChart.getData() != null && mChart.getData().getDataSetCount() > 0) { 
      set1 = (BarDataSet)mChart.getData().getDataSetByIndex(0); 
      set1.setValues(yVals1); 
      mChart.getData().notifyDataChanged(); 
      mChart.notifyDataSetChanged(); 
     } else { 
      set1 = new BarDataSet(yVals1, getString(R.string.future_graph_name)); 
      ArrayList<IBarDataSet> dataSets = new ArrayList<>(); 
      dataSets.add(set1); 
      BarData data = new BarData(dataSets); 
      data.setDrawValues(false); 
      data.setBarWidth(barWidth); 
      mChart.setData(data); 
      mChart.getXAxis().setValueFormatter(new LabelValueFormatter(set1)); 

     } 
    } 

    public int getDp(int px) { 
     DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics(); 
     return Math.round(px/(displayMetrics.xdpi/DisplayMetrics.DENSITY_DEFAULT)); 
    } 
} 
+0

你是什麼意思「有一次我拖值重置。」 ? – Firerazzer

+0

請看我的編輯。當我滾動/拖動這發生 – Mazz

回答

0

我對古典BARCHART在滾動視圖試圖mChart.setExtraOffsets (0f, 0f, 0f, 0f);和它的作品。 我希望它能以同樣的方式用於水平條形圖。

我認爲問題是,當你滾動,圖表重繪和方法resetViewPortOffsets()被調用。

+0

仍然無法正常工作。我一起刪除了偏移量,但拖動後條形圖仍然變化,這是爲什麼? – Mazz

+0

是否有可能讓您的所有代碼進行實驗? – Firerazzer

+0

我已更新完整密碼 – Mazz