티스토리 뷰

SWDesk/App

[Android] 그래프 예제

bizmaker 2024. 4. 6. 06:30

안드로이드 앱 개발 시

double 또는 int 형의 데이터 배열이 있는 경우,

이 데이터를 이용하여 그래프(Graph)를 그리는 예제 코드

 

 

import android.os.Bundle
import android.view.View
import android.widget.TextView
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

class MainActivity : AppCompatActivity() {

    private lateinit var lineChart: LineChart
    private lateinit var textView: TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        lineChart = findViewById(R.id.line_chart)
        textView = findViewById(R.id.text_view)

        // 데이터 준비
        val data = doubleArrayOf(1.2, 3.4, 5.6, 7.8, 9.0)

        // 그래프 설정
        setupLineChart()

        // 데이터 표시
        setData(data)
    }

    private fun setupLineChart() {
        lineChart.description.isEnabled = false
        lineChart.setTouchEnabled(true)
        lineChart.isDragEnabled = true
        lineChart.setScaleEnabled(true)

        val xAxis = lineChart.xAxis
        xAxis.position = XAxis.XAxisPosition.BOTTOM
        xAxis.setDrawLabels(true)
        xAxis.setGranularity(1f)

        val yAxis = lineChart.axisLeft
        yAxis.setDrawLabels(true)

        lineChart.axisRight.isEnabled = false

        // 라인 설정
        val lineDataSet = LineDataSet(null, "데이터")
        lineDataSet.color = Color.RED
        lineDataSet.lineWidth = 2f
        lineDataSet.setDrawCircles(true)
        lineDataSet.setCircleColor(Color.BLUE)
        lineDataSet.circleRadius = 5f

        lineChart.data = LineData(lineDataSet)
    }

    private fun setData(data: DoubleArray) {
        val entries = mutableListOf<Entry>()
        for (i in data.indices) {
            entries.add(Entry(i.toFloat(), data[i].toFloat()))
        }

        val lineDataSet = lineChart.data.getDataSetByIndex(0) as LineDataSet
        lineDataSet.values = entries
        lineChart.data.notifyDataChanged()
        lineChart.invalidate()

        // 데이터 텍스트 표시
        textView.text = data.joinToString("\n")
    }
}

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/line_chart"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toTopOf="@id/text_view" />

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:textSize="16sp"
        app:layout_constraintBottom_toBottomOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
반응형

'SWDesk > App' 카테고리의 다른 글

[Kotlin] Treat Key Event  (0) 2024.06.14
[Android] Fragment 개념  (1) 2024.04.08
[Android] RecyclerView 예제  (0) 2024.04.04
[Android] Bilient Navigator 출시  (0) 2024.01.10
[Android] WebView 예제 소스코드  (0) 2024.01.05
반응형
250x250
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함