2016-05-30 21 views
0

横mpandroid barchartを使用していますが、x軸に6,000,000のような数字があるので、x軸が崩壊するので、必要なのは6のようなインドのルピーに変換する方法です。試してみましたです:水平mpandroidchartでx軸の値をカスタマイズする方法は?

横棒グラフに値を設定しています場所です:

ArrayList<BarEntry> entries = new ArrayList<>(); 
     ArrayList<String> labels = new ArrayList<String>(); 
     Format format = NumberFormat.getCurrencyInstance(new Locale("en", "in")); 
     // System.out.println(format.format(new BigDecimal("100000000"))); 



     for(int i=0;i<listobj.size();i++){ 
      String s= format.format(listobj.get(i).getData()); 
     // Log.e("ss", s); 
//   Integer numberformat=Integer.parseInt(s); 
      entries.add(new BarEntry(listobj.get(i).getData(),i)); 
      labels.add(listobj.get(i).getLabel()); 
     } 
     XAxis axis=barChart.getXAxis(); 
     BarDataSet dataset = new BarDataSet(entries, "# of Calls"); 
     //dataset.setValueFormatter(new LargeValueFormatter()); 
     BarData datas = new BarData(labels, dataset); 
     /// datas.setValueFormatter(new LargeValueFormatter()); 
     barChart.setData(datas); 
     barChart.setDescription("Description"); 
     barChart.getLegend().setWordWrapEnabled(true); 

これは、値のフォーマッタです:

/** 
* Created by 4264 on 30-05-2016. 
*/ 

import com.github.mikephil.charting.data.Entry; 
import com.github.mikephil.charting.formatter.ValueFormatter; 
import com.github.mikephil.charting.utils.ViewPortHandler; 

import java.text.DecimalFormat; 

/** 
* Predefined value-formatter that formats large numbers in a pretty way. 
* Outputs: 856 = 856; 1000 = 1k; 5821 = 5.8k; 10500 = 10k; 101800 = 102k; 
* 2000000 = 2m; 7800000 = 7.8m; 92150000 = 92m; 123200000 = 123m; 9999999 = 
* 10m; 1000000000 = 1b; Special thanks to Roman Gromov 
* (https://github.com/romangromov) for this piece of code. 
* 
* @author Philipp Jahoda 
* @author Oleksandr Tyshkovets <[email protected]> 
*/ 
class LargeValueFormatter implements ValueFormatter { 

    private static String[] SUFFIX = new String[]{ 
      "", "k", "m", "b", "t" 
    }; 
    private static final int MAX_LENGTH = 4; 
    private DecimalFormat mFormat; 
    private String mText = ""; 

    public LargeValueFormatter() { 
     mFormat = new DecimalFormat("###E0"); 
    } 

    /** 
    * Creates a formatter that appends a specified text to the result string 
    * 
    * @param appendix a text that will be appended 
    */ 
    public LargeValueFormatter(String appendix) { 
     this(); 
     mText = appendix; 
    } 

    // ValueFormatter 
    @Override 
    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) { 
     return makePretty(value) + mText; 
    } 


    // YAxisValueFormatter 


    /** 
    * Set an appendix text to be added at the end of the formatted value. 
    * 
    * @param appendix 
    */ 
    public void setAppendix(String appendix) { 
     this.mText = appendix; 
    } 

    /** 
    * Set custom suffix to be appended after the values. 
    * Default suffix: ["", "k", "m", "b", "t"] 
    * 
    * @param suff new suffix 
    */ 
    public void setSuffix(String[] suff) { 
     if (suff.length == 5) { 
      SUFFIX = suff; 
     } 
    } 

    /** 
    * Formats each number properly. Special thanks to Roman Gromov 
    * (https://github.com/romangromov) for this piece of code. 
    */ 
    private String makePretty(double number) { 

     String r = mFormat.format(number); 

     r = r.replaceAll("E[0-9]", SUFFIX[Character.getNumericValue(r.charAt(r.length() - 1))/3]); 

     while (r.length() > MAX_LENGTH || r.matches("[0-9]+\\.[a-z]")) { 
      r = r.substring(0, r.length() - 2) + r.substring(r.length() - 1); 
     } 

     return r; 
    } 

    } 

私はどのようにx軸の値をカスタマイズする方法がわかりません私はこれを行うことができますか?誰も助けてくれてありがとう!

答えて

0

問題を解決するために2つの方法があります。 1)値を挿入する際に、値を1000,000で割り、ラベルを6Crに変更することができます。私は0から30までの値を持つチャートを持っており、1つの値は4000です。データベースに値を格納している間に、それを100で割って表示しながら、正しい値を表示するようにラベルを変更します。 サンプルSQLの挿入値:

Float.valueOf(LEUCO_COUNT.getText().toString())/1000, 

2)オプション2は、表示する前に値を1000,000で除算し、バーベルを修正してCrを表示することです。あなたはAPIを使ってカスタムラベルを設定する方法を見つけることができます

これは役に立ちます。

0

既存の機能を以下の機能に置き換える必要があります。私のために機能します。

プライベート文字列makePretty(ダブルナンバー){

double Cr = 10000000; 
    double Lac = 100000; 

    String result = mFormat.format(number); 
    try { 
     double LAmt = Double.parseDouble(result); 
     String Append = ""; 
     if (LAmt > Cr) {//1Crore 
      LAmt /= Cr; 
      Append = "Cr"; 
     } else { 
      LAmt /= Lac; 
      Append = "L"; 
     } 
     result = CommonUtils.GetFormattedString("" + LAmt) + Append; 
    } catch (NumberFormatException e) { 
     Log.d("", ""); 
    } 
    return result; 
} 
関連する問題