Как создать линейный график динамически, как это изображение - PullRequest
0 голосов
/ 15 октября 2018

Линейный график

У меня есть 5 динамических данных, которые дают +1 или -1 как результат, если результат равен +1, то направление графика направлено вверх, а если результат равен-1, тогда направление графика направлено вниз.

1 Ответ

0 голосов
/ 16 октября 2018

Изображение в вашем вопросе недоступно для просмотра, но я могу привести пример того, как легко нарисовать линейную диаграмму в вашем приложении для Android.

Сначала - как уже упоминалось в комментарии - вы можете использовать MPAndroidChart,Вы можете добавить его в свой проект следующим образом:

 implementation "com.github.PhilJay:MPAndroidChart:v3.0.3"

Вот пример реализации линейного графика по умолчанию, который я использую в своих личных проектах.

open class DefaultLineChart @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyle: Int = 0)
    : LineChart(context, attrs, defStyle) {

    init {
        setupChart()
    }

    private fun setupChart() {

        // Init Description
        val description = Description().apply {
            isEnabled = false
        }
        setDescription(description)

        // Init GridBackground
        setGridBackgroundColor(android.R.color.white)
        setDrawGridBackground(true)

        // Init Borders
        setDrawBorders(true)
        setBorderColor(android.R.color.black)
        setBorderWidth(1f)

        // Init Other Properties
        setPinchZoom(false)
        isDoubleTapToZoomEnabled = false
        isDragEnabled = true
        setNoDataText(context.getString(R.string.info_text_no_content))
        setScaleEnabled(true)

        // Init Legend
        val legend = legend.apply {
            isEnabled = false
        }

        // Init xAxis
        val xAxis = xAxis.apply {
            isEnabled = true
            setCenterAxisLabels(false)
            gridColor = android.R.color.white
            setAvoidFirstLastClipping(false)
            setDrawLimitLinesBehindData(true)
            position = XAxis.XAxisPosition.BOTTOM
        }


        // Init leftAxis
        val leftAxis = axisLeft.apply {
            axisMinimum = 0f
            setDrawAxisLine(false)
            setDrawZeroLine(true)
            setDrawGridLines(true)
            gridColor = android.R.color.black
            axisLineColor = android.R.color.black
        }

        val rightAxis = axisRight.apply {
            isEnabled = false
        }
    }

    fun setChartTitle(title: String) {
        val description = Description().apply {
            text = title
            isEnabled = true
        }
        setDescription(description)
    }
}

Вы можете добавить его в свой xmlкомпоновка, как показано ниже:

<path_to_your_class.DefaultLineChart
                    android:layout_width="match_parent"
                    android:layout_height="400dp"
                    android:layout_marginTop="16dp"/>

Наконец, вы можете нарисовать диаграмму, как следующий код:

fun bindDefaultLineChart(chartView: LineChart,
                                 marketValues: List<MarketVal>?,
                                 label: String?) {
            if (marketValues == null) {
                return
            }

            val yValues = ArrayList<Entry>()
            var maxCount: Long = 0
            for (marketValue in marketValues) {
                val entry = Entry(marketValue.dateTime.toFloat(),
                        marketValue.transactionNumber.toFloat())
                yValues.add(entry)
                if (marketValue.transactionNumber > maxCount) {
                    maxCount = marketValue.transactionNumber.toLong()
                }
            }

            val xAxis = chartView.xAxis
            val xAxisFormatter = ChartValueDateFormatter(Constants.DEFAULT_DATE_FORMAT)
            xAxis.valueFormatter = xAxisFormatter

            chartView.axisLeft.apply {
                axisMaximum = (maxCount + MAX_CHAR_Y_AXIS_ADDITION).toFloat()
                valueFormatter = NonFloatValueFormatter()
            }

            val dataSet = LineDataSet(yValues, label).apply {
                axisDependency = YAxis.AxisDependency.LEFT
                color = ContextCompat.getColor(chartView.context, R.color.colorAccent)
                formLineWidth = 2f
                setDrawIcons(true)
                setDrawValues(false)
            }

            val lineData = LineData(dataSet)
            chartView.data = lineData
        }
}

Пример реализации вы можете найти в здесь .

...