如何在 android studio in kotlin 中制作折线图

How to make a line graph in android studio in kotlin

我正在山谷中做一个android应用程序,我想做一个折线图,但是我在哪里都找不到正确的文档,而且总是有错误。有人会给出正确的版本或显示正确的代码

enter image description here

说明如何从大约 30 行代码中做到这一点,这很难。但我可以建议你搜索一篇文章来搜索如何实现它。单击 here 并关注文章。 希望能帮到你:-)

编辑

解决lineChart错误,声明如下:

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


        var lineChart: LineChart
}

确保导入:

import com.github.mikephil.charting.charts.LineChart

如果您在查找导入时遇到问题,请转到应用 build.gradle 并粘贴它:

repositories {
    google()
    mavenCentral()
    maven { url 'https://jitpack.io' }

}

和:

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

编辑 2

如果你想仿照link的例子,必须声明lineGraph。在这种情况下,linegraph 只不过是 activity_layout.xml 中声明的对象的 id。事实上,您需要在 activity_layout.xml:

中添加这段代码
<com.github.mikephil.charting.charts.LineChart
    android:id="@+id/lineChart"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:layout_marginStart="5dp"
    android:layout_marginEnd="5dp"
    android:padding="9dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

添加后,您必须转到主活动并在 onCreate 中写入:

class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
   
              val lineChart = findViewById<LineChart>(R.id.lineChart)
    }

要解决另外两个问题,请把文章看完。其实CustomMarker就是一个class定义如下:

class CustomMarker(context: Context, layoutResource: Int):  MarkerView(context, layoutResource) {
    override fun refreshContent(entry: Entry?, highlight: Highlight?) {
        val value = entry?.y?.toDouble() ?: 0.0
        var resText = ""
        if(value.toString().length > 8){
            resText = "Val: " + value.toString().substring(0,7)
        }
        else{
            resText = "Val: " + value.toString()
        }
        tvPrice.text = resText
        super.refreshContent(entry, highlight)
    }

    override fun getOffsetForDrawingAtPoint(xpos: Float, ypos: Float): MPPointF {
        return MPPointF(-width / 2f, -height - 10f)
    }
}