2014-10-02 25 views
0

我用AChartEngine 1.0.0插件生成這樣的linegraph:AChartEngine 1.1.0(機器人)

enter image description here

這樣做的問題是,在y valyes需要被對準到左... 當我在網上看到我找到了一個解決方案:使用1.1.0插件,而不是 方法:setYLabelsPadding(10)的渲染,現在我可以正確設置填充,但由於某種原因,這發生;

enter image description here

package com.example.driveinstructor.tabactivity.fragments; 

import java.util.Random; 

import com.example.driveinstructor.R; 
import org.achartengine.ChartFactory; 
import org.achartengine.GraphicalView; 
import org.achartengine.chart.PointStyle; 
import org.achartengine.model.XYMultipleSeriesDataset; 
import org.achartengine.model.XYSeries; 
import org.achartengine.renderer.XYMultipleSeriesRenderer; 
import org.achartengine.renderer.XYSeriesRenderer; 

import android.app.Fragment; 
import android.graphics.Color; 
import android.graphics.Paint.Align; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.LinearLayout; 

public class GraphFragment extends Fragment 
{ 
private GraphicalView mChart; 

private XYSeries visitsSeries ; 
private XYMultipleSeriesDataset dataset; 

private XYSeriesRenderer visitsRenderer; 
private XYMultipleSeriesRenderer multiRenderer; 

private String[]graphValues = new String[11];//11 want op 0 moet ook een punt staan 
private View v; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    v= inflater.inflate(R.layout.fragment_graph,container,false); 

     // Setting up chart 
     setupChart(); 

     // Start plotting chart 
     new ChartTask().execute(); 

    return v; 
} 

private void setupChart(){ 

     // Creating an XYSeries for Visits 
     visitsSeries = new XYSeries("Unique Visitors"); 


     // Creating a dataset to hold each series 
     dataset = new XYMultipleSeriesDataset(); 
     // Adding Visits Series to the dataset 
     dataset.addSeries(visitsSeries);   


     // Creating XYSeriesRenderer to customize visitsSeries 
     visitsRenderer = new XYSeriesRenderer(); 
     visitsRenderer.setColor(Color.WHITE); 
     visitsRenderer.setPointStyle(PointStyle.CIRCLE); 
     visitsRenderer.setFillPoints(true); 
     visitsRenderer.setLineWidth(2); 
     //visitsRenderer.setDisplayChartValues(true); 
     visitsRenderer.setColor(Color.parseColor("#FF8800"));//kleur vd lijn 


     // Creating a XYMultipleSeriesRenderer to customize the whole chart 
     multiRenderer = new XYMultipleSeriesRenderer(); 

    // multiRenderer.setChartTitle("Visits Chart"); 
    // multiRenderer.setXTitle("Seconds"); 
    // multiRenderer.setYTitle("Count"); 
     multiRenderer.setZoomButtonsVisible(false); 

     multiRenderer.setXAxisMin(0); 
     multiRenderer.setXAxisMax(10); 

     multiRenderer.setYAxisMin(0); 
     multiRenderer.setYAxisMax(3000); 
     multiRenderer.setYLabels(7); 
     multiRenderer.setXLabels(10); 
     multiRenderer.setBarSpacing(2); 

     multiRenderer.setShowLegend(false); 
     multiRenderer.addSeriesRenderer(visitsRenderer); 
     multiRenderer.setMargins(new int[] {20,58, 0, 40}); // top, left, bottom, right. 
     multiRenderer.setMarginsColor(Color.argb(0x00, 0xff, 0x00, 0x00)); 

     // Getting a reference to LinearLayout of the MainActivity Layout 
     LinearLayout chartContainer = (LinearLayout) v.findViewById(R.id.graph1); 


     multiRenderer.setYLabelsPadding(10); 
     multiRenderer.setShowGridX(true); 
     multiRenderer.setShowGridY(true); 

     mChart = (GraphicalView) ChartFactory.getLineChartView(getActivity(), dataset, multiRenderer); 


     // Adding the Line Chart to the LinearLayout 
     chartContainer.addView(mChart); 

    } 


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

     // Generates dummy data in a non-ui thread 


     @Override 
     protected Void doInBackground(Void... params) 
     { 
      int i = 0; 
      try{ 

       do{ 
        String [] values = new String[2]; 
        Random r = new Random(); 
        int visits = r.nextInt(3000); 
        System.out.println("index i= " + String.valueOf(i)); 
        System.out.println(String.valueOf(visits)); 

        graphValues[0] = Integer.toString(visits); //bijhorende waarde y-as 



        publishProgress(graphValues);     
        Thread.sleep(1000); 
        i++; 

        if (i>10) 
        { 
         i=10; 
        } 

        for(int j=i; j>0; j--) 
        { 
        //System.out.println("j" +j); 
        graphValues[j]=graphValues[j-1]; 

        } 




       }while(i<=20); 
      }catch(Exception e){ } 
      return null; 
     } 

     // Plotting generated data in the graph 
     @Override 
     protected void onProgressUpdate(String... values) 
     { 

      int a = 0; 
      for(String s: values) 
      { 
       if(s!=null) 
       { 
     // System.out.println("test " + s); 
      visitsSeries.add(a, Integer.parseInt(values[a]));  
      a++; 
       } 
       else 
       { 
        break; 
       } 
      } 
      mChart.repaint(); 

      //visitsSeries.add(Integer.parseInt(values[0]), Integer.parseInt(values[1])); 
      //mChart.repaint(); 
     } 

    }  


} 

回答

1

您需要調整三件事(首次上升左側的Y軸的空間,然後添加額外填充的值向左移動,然後使用ylabelsAlign屬性)

multiRenderer.setMargins(new int[]{1,2,3,4}); 
//second value corresponds to the space on the left side of Y-axis 
multiRenderer.setYLabelsPadding(someFloatValue); 
//Padding will adjust the values to the left side 
multiRenderer.setYLabelsAlign();