/
NikolayIvkin
/
MPAndroidChart1
Обзор
Документация
Войти
/
NikolayIvkin
/
MPAndroidChart1
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
MPChartExample/src/main/java/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java
208 строк
7 KB
almic
More Cleanup
28 окт 2018, 03:00
Не верифицирован
28 окт 2018, 03:00
5030b36
Код
Авторство
О чём код?
package com.xxmassdeveloper.mpchartexample; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.net.Uri; import android.os.Bundle; import androidx.annotation.NonNull; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.ListView; import com.github.mikephil.charting.data.BarData; import com.github.mikephil.charting.data.BarDataSet; import com.github.mikephil.charting.data.BarEntry; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; 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.interfaces.datasets.ILineDataSet; import com.github.mikephil.charting.utils.ColorTemplate; import com.xxmassdeveloper.mpchartexample.listviewitems.BarChartItem; import com.xxmassdeveloper.mpchartexample.listviewitems.ChartItem; import com.xxmassdeveloper.mpchartexample.listviewitems.LineChartItem; import com.xxmassdeveloper.mpchartexample.listviewitems.PieChartItem; import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase; import java.util.ArrayList; import java.util.List; /** * Demonstrates the use of charts inside a ListView. IMPORTANT: provide a * specific height attribute for the chart inside your ListView item * * @author Philipp Jahoda */ public class ListViewMultiChartActivity extends DemoBase { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_listview_chart); setTitle("ListViewMultiChartActivity"); ListView lv = findViewById(R.id.listView1); ArrayList<ChartItem> list = new ArrayList<>(); // 30 items for (int i = 0; i < 30; i++) { if(i % 3 == 0) { list.add(new LineChartItem(generateDataLine(i + 1), getApplicationContext())); } else if(i % 3 == 1) { list.add(new BarChartItem(generateDataBar(i + 1), getApplicationContext())); } else if(i % 3 == 2) { list.add(new PieChartItem(generateDataPie(), getApplicationContext())); } } ChartDataAdapter cda = new ChartDataAdapter(getApplicationContext(), list); lv.setAdapter(cda); } /** adapter that supports 3 different item types */ private class ChartDataAdapter extends ArrayAdapter<ChartItem> { ChartDataAdapter(Context context, List<ChartItem> objects) { super(context, 0, objects); } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { //noinspection ConstantConditions return getItem(position).getView(position, convertView, getContext()); } @Override public int getItemViewType(int position) { // return the views type ChartItem ci = getItem(position); return ci != null ? ci.getItemType() : 0; } @Override public int getViewTypeCount() { return 3; // we have 3 different item-types } } /** * generates a random ChartData object with just one DataSet * * @return Line data */ private LineData generateDataLine(int cnt) { ArrayList<Entry> values1 = new ArrayList<>(); for (int i = 0; i < 12; i++) { values1.add(new Entry(i, (int) (Math.random() * 65) + 40)); } LineDataSet d1 = new LineDataSet(values1, "New DataSet " + cnt + ", (1)"); d1.setLineWidth(2.5f); d1.setCircleRadius(4.5f); d1.setHighLightColor(Color.rgb(244, 117, 117)); d1.setDrawValues(false); ArrayList<Entry> values2 = new ArrayList<>(); for (int i = 0; i < 12; i++) { values2.add(new Entry(i, values1.get(i).getY() - 30)); } LineDataSet d2 = new LineDataSet(values2, "New DataSet " + cnt + ", (2)"); d2.setLineWidth(2.5f); d2.setCircleRadius(4.5f); d2.setHighLightColor(Color.rgb(244, 117, 117)); d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setDrawValues(false); ArrayList<ILineDataSet> sets = new ArrayList<>(); sets.add(d1); sets.add(d2); return new LineData(sets); } /** * generates a random ChartData object with just one DataSet * * @return Bar data */ private BarData generateDataBar(int cnt) { ArrayList<BarEntry> entries = new ArrayList<>(); for (int i = 0; i < 12; i++) { entries.add(new BarEntry(i, (int) (Math.random() * 70) + 30)); } BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt); d.setColors(ColorTemplate.VORDIPLOM_COLORS); d.setHighLightAlpha(255); BarData cd = new BarData(d); cd.setBarWidth(0.9f); return cd; } /** * generates a random ChartData object with just one DataSet * * @return Pie data */ private PieData generateDataPie() { ArrayList<PieEntry> entries = new ArrayList<>(); for (int i = 0; i < 4; i++) { entries.add(new PieEntry((float) ((Math.random() * 70) + 30), "Quarter " + (i+1))); } PieDataSet d = new PieDataSet(entries, ""); // space between slices d.setSliceSpace(2f); d.setColors(ColorTemplate.VORDIPLOM_COLORS); return new PieData(d); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.only_github, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.viewGithub: { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewMultiChartActivity.java")); startActivity(i); break; } } return true; } @Override public void saveToGallery() { /* Intentionally left empty */ } }