неправильно отображает график - PullRequest
0 голосов
/ 28 апреля 2019

Я добавил расписание в свое приложение.Я использовал MPAndroidCharts lib для графиков.

package com.example.myapplication;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import com.github.mikephil.charting.charts.LineChart;
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.interfaces.datasets.ILineDataSet;

import java.util.ArrayList;

import static java.lang.Math.atan;
import static java.lang.Math.sqrt;


public class Main3Activity extends AppCompatActivity {

    TextView n2, h, yTE, yTM;
    double sreda1, max, sreda3, sreda4, ugol, pogr, laser, normgr, normmin, normsec, tegrad, temin, tesec, tmgrad, tmmin, tmsec;
    double pi = 3.141592653589793238463;
    double L, n1, n3, m;


    double funcTE(double n2) {
        double fTE, yTE;
        L = getIntent().getDoubleExtra("laser", 0.0);
        n3 = getIntent().getDoubleExtra("sreda3", 0.0);
        n1 = getIntent().getDoubleExtra("sreda1", 0.0);
        m = 1;
        String yTEs = getIntent().getStringExtra("yTE");
        yTE = Double.valueOf(yTEs);

        fTE = ((L * (atan(sqrt((yTE * yTE) - (n1 * n1)) / sqrt((n2 * n2) - (yTE * yTE))) + atan(sqrt((yTE * yTE) - (n3 * n3)) / sqrt((n2 * n2) - (yTE * yTE))) + pi * (m - 1))) / (2 * pi * sqrt((n2 * n2) - (yTE * yTE))));
        return fTE;
    }

    double funcTM(double n2) {
        double fTM, yTM;
        L = getIntent().getDoubleExtra("laser", 0.0);
        n3 = getIntent().getDoubleExtra("sreda3", 0.0);
        n1 = getIntent().getDoubleExtra("sreda1", 0.0);
        m = 1;
        String yTMs = getIntent().getStringExtra("yTM");
        yTM = Double.valueOf(yTMs);

        fTM = ((L * (atan(((n2 * n2) / (n1 * n1)) * sqrt((yTM * yTM) - (n1 * n1)) / sqrt((n2 * n2) - (yTM * yTM))) + atan(((n2 * n2) / (n3 * n3)) * sqrt((yTM * yTM) - (n3 * n3)) / sqrt((n2 * n2) - (yTM * yTM))) + pi * (m - 1))) / (2 * pi * sqrt((n2 * n2) - (yTM * yTM))));
        return fTM;
    }

    private LineChart mChart;

    @SuppressLint("SetTextI18n")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        initToolbar();

        String n2s, hs, yTEs, yTMs, n3s;
        double n2d, n3d;

        int a;

        n2 = findViewById(R.id.n2);
        h = findViewById(R.id.h);
        yTE = findViewById(R.id.yTE);
        yTM = findViewById(R.id.yTM);

        n2s = getIntent().getStringExtra("n2");
        hs = getIntent().getStringExtra("h");
        yTEs = getIntent().getStringExtra("yTE");
        yTMs = getIntent().getStringExtra("yTM");
        n3d = getIntent().getDoubleExtra("sreda3", 0.0);

        n2d = Double.valueOf(n2s);

        max = getIntent().getDoubleExtra("max", 0.0);
        pogr = getIntent().getDoubleExtra("pogr", 0.0);

        if (n2s.length() < 11) {
            a = n2s.length();
            n2s = n2s.substring(0, a);
        } else {
            n2s = n2s.substring(0, 12);
        }
        if (hs.length() < 11) {
            a = hs.length();
            hs = hs.substring(0, a);
        } else {
            hs = hs.substring(0, 12);
        }
        if (yTEs.length() < 11) {
            a = yTEs.length();
            yTEs = yTEs.substring(0, a);
        } else {
            yTEs = yTEs.substring(0, 12);
        }
        if (yTMs.length() < 11) {
            a = yTMs.length();
            yTMs = yTMs.substring(0, a);
        } else {
            yTMs = yTMs.substring(0, 12);
        }


        n2.setText("n2 =" + n2s);
        h.setText("h =" + hs);
        yTE.setText("yTE = " + yTEs);
        yTM.setText("yTM = " + yTMs);

        mChart = findViewById(R.id.linechart);


        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setPinchZoom(true);

        ArrayList<Entry> yValues = new ArrayList<>();

        for (n2d = n3d; n2d < max; n2d = n2d + pogr) {
            yValues.add(new Entry((float) n2d, (float) funcTE(n2d)));
        }


        LineDataSet set1 = new LineDataSet(yValues, "TE");
        set1.setFillAlpha(255);
        set1.setColor(Color.RED);
        set1.setLineWidth(10);

        ArrayList<ILineDataSet> dataSets = new ArrayList<>();
        dataSets.add(set1);


        ArrayList<Entry> xValues = new ArrayList<>();

        for (n2d = n3d; n2d < max; n2d = n2d + pogr) {
            xValues.add(new Entry((float) n2d, (float) funcTM(n2d)));
        }


        LineDataSet set2 = new LineDataSet(xValues, "TM");
        set2.setFillAlpha(255);
        set2.setColor(Color.BLUE);
        set2.setLineWidth(7);

        dataSets.add(set2);

        LineData data = new LineData(dataSets);
        mChart.setData(data);


    }

    private void initToolbar() {
        Toolbar toolbar = findViewById(R.id.toolbar);
        TextView tool_but = findViewById(R.id.tool_but);
        tool_but.setText("Результат");
        setSupportActionBar(toolbar);
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Intent intent = new Intent(Main3Activity.this, Main2Activity.class);
        sreda1 = getIntent().getDoubleExtra("sreda1", 0.0);
        max = getIntent().getDoubleExtra("max", 0.0);
        sreda3 = getIntent().getDoubleExtra("sreda3", 0.0);
        sreda4 = getIntent().getDoubleExtra("sreda4", 0.0);
        ugol = getIntent().getDoubleExtra("ugol", 0.0);
        pogr = getIntent().getDoubleExtra("pogr", 0.0);
        laser = getIntent().getDoubleExtra("laser", 0.0);
        normgr = getIntent().getDoubleExtra("normgr", 0.0);
        normmin = getIntent().getDoubleExtra("normmin", 0.0);
        normsec = getIntent().getDoubleExtra("normsec", 0.0);
        tegrad = getIntent().getDoubleExtra("tegrad", 0.0);
        temin = getIntent().getDoubleExtra("temin", 0.0);
        tesec = getIntent().getDoubleExtra("tesec", 0.0);
        tmgrad = getIntent().getDoubleExtra("tmgrad", 0.0);
        tmmin = getIntent().getDoubleExtra("tmmin", 0.0);
        tmsec = getIntent().getDoubleExtra("tmsec", 0.0);

        intent.putExtra("sreda1", sreda1);
        intent.putExtra("max", max);
        intent.putExtra("sreda3", sreda3);
        intent.putExtra("sreda4", sreda4);
        intent.putExtra("ugol", ugol);
        intent.putExtra("pogr", pogr);
        intent.putExtra("laser", laser);
        intent.putExtra("normgr", normgr);
        intent.putExtra("normmin", normmin);
        intent.putExtra("normsec", normsec);
        intent.putExtra("tegrad", tegrad);
        intent.putExtra("temin", temin);
        intent.putExtra("tesec", tesec);
        intent.putExtra("tmgrad", tmgrad);
        intent.putExtra("tmmin", tmmin);
        intent.putExtra("tmsec", tmsec);

        startActivity(intent);
    }
}

Вместо графиков отображаются только точки.Графики видны только при сильном увеличении.И, пожалуйста, скажите мне, как установить область действия оси X?

pick of activity with charts

1 Ответ

0 голосов
/ 28 апреля 2019

Попробуйте установить размер текста и цвет текста для левой и правой осей. Также проверьте пример проекта

...