Android Programlama -40 Barchart Graph

Merhaba arkadaşlar bu gün ki makalemde uygulama içerisinde barchart grafiğini nasıl kullanacağımıza değineceğim.

Önceki makalelerime buradan ulaşabilirsiniz.

package com.example.user.keepingmeontrack;

import com.example.user.keepingmeontrack.models.Goal;
import com.example.user.keepingmeontrack.models.Network;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;

import org.joda.time.DateTime;
import org.joda.time.Duration;
import org.joda.time.LocalDate;

import java.util.ArrayList;

/**
* Created by elifasli on 16.02.2018.
*/

public class FinanceGoalDetail extends BaseActivity {


FirebaseDatabase database;
DatabaseReference myRef;
DatabaseReference myRef2;
Goal value;
Goal value2;
String selectedItem;

BarChart barchart;
String userNAme;
Button btnOpenDialog;
TextView textInfo;
String goalId;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.finance_goal_detail);
barchart =findviewbyId(R.id.barchart);

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for (DataSnapshot verigetir : dataSnapshot.getChildren()) {

                    try {
                        value = verigetir.getValue(Goal.class);

                        if (selectedItem.equals(value.getId())) {
                            setdata(value);
                            value2 = value;
                        }

                    } catch (Exception e) {
                        // This will catch any exception, because they are all descended from Exception
                        System.out.println("Error " + e.getMessage());
                    }

}

/**
* Set Adapter
*/
public void setdata(Goal obje) {
// calculateDate(obje.getStartDate(),obje.getEndDate());
int toplamPara = Integer.parseInt(obje.getTotalMoney());
double haftalikPara = obje.gethFaizliPara();
LocalDate startDate = LocalDate.parse(obje.getStartDate());
LocalDate now = new LocalDate();

DateTime now_ = new DateTime();
DateTime startDate_ = new DateTime(obje.getStartDate());

Duration duration = new Duration(startDate_, now_);

int gecenSure = (int) duration.getStandardDays();
gecenSure=gecenSure/7;
int savingMoney=gecenSure*(int)haftalikPara;
int restMoney=toplamPara-savingMoney;
setGraph(toplamPara,savingMoney,restMoney);
}
public void setGraph(int totalMoney,int savingMoneyy,int restMoneyy) {

barchart.getDescription().setEnabled(false);
setData(totalMoney,savingMoneyy,restMoneyy);
barchart.setFitBars(true);

}
private void setData(int totallMoneyy,int savinggMoneyy,int resttMoneyy) {
ArrayList<BarEntry> yvals = new ArrayList<>();

yvals.add(new BarEntry(0,savinggMoneyy));
yvals.add(new BarEntry(1,resttMoneyy));
yvals.add(new BarEntry(2,totallMoneyy));

BarDataSet set = new BarDataSet(yvals, "Data Set ");
set.setColors(ColorTemplate.MATERIAL_COLORS);
set.setDrawValues(true);

BarData data = new BarData(set);
barchart.setData(data);
barchart.invalidate();
barchart.animateY(200);
}
}

Kodumuzu inceleyecek olursak, öncelikle grafikte göstermek istediğimiz verileri database’den okuyoruz. Sonra okuduğumuz verileri setdata() methoduna göndererek grafikte gösterilmesini sağlıyoruz. Ben bu projede kumbarada biriken parayı ve hedef olarak belirlediğim miktara ne kadar kaldığıyla ilgili bir bilgileri grafikte göstermek istiyorum. Bunun için matamatiksel hesaplamalar yapıp grafikte göstermek istediğim veriyi hazırlıyorum. Sonra hesaplanan değerleri setData() methoduna gönderip orada grafik ile ilgili düzenlemeleri yapıyorum. Bu methodda yine barchar’ın hangi renklerde olacağını, kaç tane barchar olacağını ve grafiğin animasyonunu ayarlıyorum. Sizde bu methodu kendi tasarımınıza göre revize edebilirsiniz.

Bir makalenin daha sonuna geldik, esenle kalın..

Kübra Hebeş

Bilgisayar Mühendisi

Leave a Reply

Your email address will not be published. Required fields are marked *