sql >> データベース >  >> RDS >> SQLite

sqliteに保存されている個々の値に基づいてMPandroidChartsのバーの色を変更するにはどうすればよいですか?

    私が理解しているように、あなたはbunkに基づいてバーをプロットしたいと思います ただし、creditsに基づいて色を付けます 。カスタムバーデータセットを使用するのが正しいアプローチです。少し変更する必要があります。以下のコードは、あなたが説明しているものを取得します。

    私が行った変更:

    • 名前のリストをBarDataに渡すことができません 、代わりに軸値フォーマッタを使用してください
    • カスタムバーデータセットを変更して、creditsも保持するようにしました 配列。 getEntryForXIndexかどうかわからない メソッドは他の場所で定義されていますが、投稿したコードには含まれていません。
    • 非推奨の呼び出しと無効な構文を削除しました(setDescription("");を呼び出すことはできません) )

    これがあなたが探しているものではない場合は、あなたが見ているものなどについての詳細で質問を更新してください...私が知る限り、質問はSQLデータベースではなくチャートに関するものでした。

    >

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        BarChart chart = findViewById(R.id.test_chart);
    
        // Some made up data - replace these with your
        //  queryYdata, queryXdata, and queryZdata methods
        String[] names = new String[]{"foo","bar","fiz","bam","boo"};
        List<Float> credits = new ArrayList<>(Arrays.asList(1f,9f,2.5f,15f,50f));
        float[] bunks = new float[]{10f,15f,16f,20f,5f};
    
        List<BarEntry> entries = new ArrayList<>();
        for(int i = 0; i < bunks.length; ++i) {
            entries.add(new BarEntry(i, bunks[i]));
        }
    
        float textSize = 16f;
    
        MyBarDataset dataSet = new MyBarDataset(entries, "data", credits);
        dataSet.setColors(ContextCompat.getColor(this,R.color.green),
                ContextCompat.getColor(this,R.color.yellow),
                ContextCompat.getColor(this,R.color.red));
        BarData data = new BarData(dataSet);
        data.setDrawValues(false);
        data.setBarWidth(0.9f);
    
        chart.setData(data);
        chart.setFitBars(true);
        chart.getXAxis().setValueFormatter(new IndexAxisValueFormatter(names));
        chart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);
        chart.getXAxis().setTextSize(textSize);
        chart.getAxisLeft().setTextSize(textSize);
        chart.setExtraBottomOffset(10f);
    
        chart.getAxisRight().setEnabled(false);
        Description desc = new Description();
        desc.setText("");
        chart.setDescription(desc);
        chart.getLegend().setEnabled(false);
        chart.getXAxis().setDrawGridLines(false);
        chart.getAxisLeft().setDrawGridLines(false);
    
        chart.invalidate();
    }
    
    public class MyBarDataset extends BarDataSet{
    
        private List<Float> credits;
    
        MyBarDataset(List<BarEntry> yVals, String label, List<Float> credits) {
            super(yVals, label);
            this.credits = credits;
        }
    
        @Override
        public int getColor(int index){
            float c = credits.get(index);
    
            if (c < 8){
                return mColors.get(0);
            }
            else if (c < 13) {
                return mColors.get(1);
            }
            else {
                return mColors.get(2);
            }
        }
    }
    

    編集: SQLデータベースについてはさておき、queryXDataを呼び出さないでください およびqueryYData ループの内側!これにより、ループの反復ごとにデータ配列全体が抽出され、次にループ自体の内部に抽出されます(非常にコストがかかります)。代わりに次のようなものを使用してください:

    ArrayList<BarEntry> yVals = new ArrayList<>();
    ArrayList<Integer> yData = myhelper.queryYdata();
    for (int i=0; i<yData.size(); i++){
        yVals.add(new BarEntry(i,yData.get(i)));
    }
    
    ArrayList<String> xData = myhelper.queryXdata();
    



    1. 初心者向けのSQLEXISTS演算子

    2. MySQLの新しいHeatwaveを理解する

    3. DBMSとは何ですか? –データベース管理システムの包括的なガイド

    4. SQLのチューニング