#java #android #mpandroidchart #android-dialogfragment
Вопрос:
Я пытаюсь настроить диаграмму MP во фрагменте диалогового окна, но не получаю желаемых результатов. Я не получаю никаких небольших изменений, но я получаю то, что действительно хочу в деятельности. Я также попытался подключить отладчик, но не смог изменить цвет линии или градиент графика.
lt;?xml version="1.0" encoding="utf-8"?gt; lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/graphbackground_bg" gt; lt;LinearLayout android:layout_marginTop="5dp" android:layout_marginLeft="5sp" android:layout_marginRight="5sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical"gt; lt;com.github.mikephil.charting.charts.LineChart android:layout_width="350dp" android:layoutDirection="locale" android:layout_gravity="center" android:layout_height="600dp" android:id="@ id/symbolChart"/gt; lt;/LinearLayoutgt; lt;/LinearLayoutgt;
Фрагмент
public class ScripChartFragment extends DialogFragment { LineChart lineChart; LineData lineData; LineDataSet set1; private Context context; View view; Listlt;Entrygt; entryList = new ArrayListlt;gt;(); public Drawable drawablePositive; public ScripChartFragment() { // Required empty public constructor } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment view = inflater.inflate(R.layout.fragment_scripchart, container, false); getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); context = getContext(); drawablePositive = ContextCompat.getDrawable(context, R.drawable.symbolchart_bg); lineChart = view.findViewById(R.id.symbolChart); setData(20,3); lineChart.getDescription().setEnabled(true); lineChart.setDrawGridBackground(true); lineChart.setDragEnabled(true); lineChart.getLegend().setEnabled(true); lineChart.setScaleEnabled(true); lineChart.setScaleYEnabled(true); lineChart.setScaleXEnabled(true); lineChart.setDrawGridBackground(false); lineChart.getXAxis().setEnabled(true); lineChart.getLineData().setDrawValues(true); lineChart.getXAxis().setDrawGridLines(true); lineChart.getXAxis().setDrawAxisLine(true); lineChart.getAxisLeft().setDrawGridLines(true); lineChart.getAxisRight().setDrawGridLines(true); lineChart.getAxisRight().setDrawZeroLine(true); lineChart.getAxisLeft().setDrawZeroLine(true); lineChart.getAxisRight().setDrawLabels(true); lineChart.getAxisLeft().setDrawLabels(true); lineChart.getAxisLeft().setEnabled(true); lineChart.getAxisRight().setEnabled(true); lineChart.setMaxHighlightDistance(150); lineChart.setViewPortOffsets(0, 0, 0, 0); lineChart.setTouchEnabled(false); lineChart.setPinchZoom(false); lineChart.notifyDataSetChanged(); LineDataSet lineDataSet = new LineDataSet(entryList,"BuySell"); lineData = new LineData(lineDataSet); lineChart.setData(lineData); return view; } private void setData(int count, float range) { entryList = new ArrayListlt;gt;(); LineData data; for (int i = 0; i lt; count; i ) { float val = (float) (Math.random() * range) - 30; entryList.add(new Entry(i, val)); } set1 = new LineDataSet(entryList, "DataSet 1"); set1.setFillDrawable(drawablePositive); set1.setFillAlpha(100); set1.setFillColor(Color.RED); set1.setColor( Color.RED); set1.setCircleColor(getResources().getColor(R.color.yellow)); set1.setLineWidth(5f); set1.setDrawValues(false); set1.setFillFormatter(new IFillFormatter() { @Override public float getFillLinePosition(ILineDataSet dataSet, LineDataProvider dataProvider) { return lineChart.getAxisLeft().getAxisMinimum(); } }); ArrayListlt;ILineDataSetgt; dataSets = new ArrayListlt;gt;(); dataSets.add(set1); data = new LineData(dataSets); lineChart.setData(data); } }
Ответ №1:
Внутри вашего onCreateView
метода, внизу, вы написали это:
LineDataSet lineDataSet = new LineDataSet(entryList,"BuySell"); lineData = new LineData(lineDataSet); lineChart.setData(lineData);
Закомментируйте / удалите эти 3 строки. Тогда вы получите результат, подобный этому:
Объяснение:
У вас есть 2 объекта LineDataSet,
-
set1 = new LineDataSet(entryList, "DataSet 1");
и
-
LineDataSet lineDataSet = new LineDataSet(entryList,"BuySell");
И вы устанавливаете эти свойства цвета для первого объекта(«Набор данных 1»). Но затем вы показываете 2-й объект («BuySell») на графике. Вот почему удаление этих 3 строк решает проблему.
Комментарии:
1. Большое тебе спасибо, теперь все работает нормально. не могли бы вы, пожалуйста, помочь мне еще в одном деле? set1.setFillDrawable(рисуемый положительный); эта строка также не работает во фрагменте диалога, но работает в действии.