Android Programlama -41 Piechart Graph

Merhaba arkadaşlar bu gün ki makalemde uygulamada piechart grafiğini nasıl kullanacağımıza değineceğim.

Bir önceki makalemde barchart grafiğine değinmiştim. Buradan okuyabilirsiniz.

package com.example.user.keepingmeontrack;

import com.example.user.keepingmeontrack.models.FitnessGoal;
import com.example.user.keepingmeontrack.models.Network;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.PieChart;
import com.github.mikephil.charting.data.PieData;
import com.github.mikephil.charting.data.PieDataSet;
import com.github.mikephil.charting.data.PieEntry;
import com.github.mikephil.charting.utils.ColorTemplate;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

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

import java.util.ArrayList;

public class FitnessDetailActivity extends BaseActivity {
String userNAme;
SharedPreferences pref;
SharedPreferences.Editor editor;
Button btnOpenDialog;
TextView textInfo;
String goalId;
PieChart pieChart;
FirebaseDatabase database;
DatabaseReference myRef;
DatabaseReference myRef2;
String selectedItem;
FitnessGoal value, value2;

@BindView(R.id.piechart)
PieChart piechart;


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fitness_detail);
/**
*Firebase connection
*/
database = FirebaseDatabase.getInstance();
myRef = database.getReference("datbase").child("fitness");
myRef2 = database.getReference("datbase");
getdata();
}
/**
* get data from the firebase
*/
public void getdata() {

myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

for (DataSnapshot verigetir : dataSnapshot.getChildren()) {

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

if (selectedItem.equals(value.getKey())) {
setdata(value);
value2 = value;
}
} catch (Exception e) {

System.out.println("Error " + e.getMessage());
}
}
}

@Override
public void onCancelled(DatabaseError error) {
Toast.makeText(FitnessDetailActivity.this, "Error", Toast.LENGTH_SHORT).show(); }
});
}
/**
* Set Adapter
*/
public void setdata(FitnessGoal obje) {
goalId = obje.getKey();
DateTime now_ = new DateTime();
DateTime startDate_ = new DateTime(obje.getStartTime());
DateTime endDate_ = new DateTime(obje.getEndDate());
setGraph(now_, startDate_, endDate_);
}

public void setGraph(DateTime now, DateTime startDate, DateTime endTime) {
Duration duration = new Duration(startDate, now);
int gecenSure = (int) duration.getStandardDays();
Duration duration2 = new Duration(now, endTime);
int kalanSure = (int) duration2.getStandardDays();
pieChart = (PieChart) findViewById(R.id.piechart);
pieChart.setUsePercentValues(true);
pieChart.getDescription().setEnabled(false);
pieChart.setExtraOffsets(0, 0, 0, 0);

pieChart.setDragDecelerationFrictionCoef(0.95f);

//içi dolu istersen hole false yap
pieChart.setDrawHoleEnabled(true);
pieChart.setHoleColor(Color.WHITE);
pieChart.setTransparentCircleRadius(30f);
//şeffaflık kalksın diye transparanı 30f yap.

ArrayList<PieEntry> yValues = new ArrayList<>();
yValues.add(new PieEntry(kalanSure, ""));
yValues.add(new PieEntry(gecenSure, ""));

pieChart.animateY(1000, Easing.EasingOption.EaseInOutCubic);

PieDataSet dataSet = new PieDataSet(yValues, "Fitness");
dataSet.setSliceSpace(2f);
dataSet.setSelectionShift(3f);
dataSet.setColors(ColorTemplate.JOYFUL_COLORS);

PieData data = new PieData((dataSet));
data.setValueTextSize(10f);
data.setValueTextColor(Color.YELLOW);

pieChart.setData(data);}
}

Barchart grafiğinde olduğu gibi öncelikle grafikte göstermek istediğimiz verileri firebase database’inden okuyup setData() methoduna gönderiyoruz. Setdata() methodunda ise sadece belirli tarihler arasındaki verileri grafikte göstermek istediğim için tarih aralığını ayarladıktan sonra setGraph() methodunu çağırıyorum.  setGraph () methodu içinde renk, size, görünüm gibi özellikleri set ediyoruz. Sizde uygulamanıza göre bu methodu 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 *