You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何在Android Studio中使用Kotlin正确实现折线图

Hey there! 我太懂你在开发《In the Valley》时找折线图正确实现文档碰壁的烦躁了——这事儿我帮不少Android开发者捋顺过,给你一套靠谱的方案,用Android端最主流的MPAndroidChart库,附完整示例代码和效果说明,绝对能帮你快速跑通:

第一步:添加库依赖到项目

首先在Module级别的build.gradle(或者新版Android Studio的build.gradle.kts)里添加依赖:

dependencies {
    implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
}

如果是新版Android Studio,记得在settings.gradle的dependencyResolutionManagement里添加jitpack仓库,否则依赖会同步失败:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}
第二步:布局文件中添加折线图控件

在你的页面布局(比如activity_main.xml)里加入折线图的控件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <!-- 折线图控件,可自定义宽高 -->
    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/valleyLineChart"
        android:layout_width="match_parent"
        android:layout_height="350dp" />

</LinearLayout>
第三步:在Activity中初始化并填充数据

下面是Kotlin版本的完整初始化代码(如果用Java我也可以给你转,不过Kotlin现在是Android开发的主流啦):

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.github.mikephil.charting.components.Description
import com.github.mikephil.charting.components.XAxis
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 com.github.mikephil.charting.utils.ColorTemplate

class ValleyChartActivity : AppCompatActivity() {
    private lateinit var lineChart: com.github.mikephil.charting.charts.LineChart

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

        lineChart = findViewById(R.id.valleyLineChart)
        // 先配置图表基础样式
        setupChartStyle()
        // 再填充模拟数据(你可以换成《In the Valley》里的真实数据)
        loadChartData()
    }

    // 配置折线图的交互和显示样式
    private fun setupChartStyle() {
        // 隐藏默认的底部描述文本
        val emptyDesc = Description()
        emptyDesc.text = ""
        lineChart.description = emptyDesc

        // 开启触摸交互:拖拽、缩放、捏合缩放
        lineChart.setTouchEnabled(true)
        lineChart.isDragEnabled = true
        lineChart.setScaleEnabled(true)
        lineChart.setPinchZoom(true)

        // 把X轴移到底部,隐藏网格线
        val xAxis = lineChart.xAxis
        xAxis.position = XAxis.XAxisPosition.BOTTOM
        xAxis.setDrawGridLines(false)

        // 隐藏右侧的Y轴,只保留左侧
        lineChart.axisRight.isEnabled = false

        // 显示图例(就是折线对应的说明文本)
        lineChart.legend.isEnabled = true
    }

    // 填充折线图的数据
    private fun loadChartData() {
        // 模拟《In the Valley》里的数据:比如山谷中7天的湿度变化
        val humidityEntries = arrayListOf<Entry>()
        humidityEntries.add(Entry(0f, 65f)) // 第1天湿度65%
        humidityEntries.add(Entry(1f, 72f)) // 第2天湿度72%
        humidityEntries.add(Entry(2f, 68f)) // 第3天湿度68%
        humidityEntries.add(Entry(3f, 75f)) // 第4天湿度75%
        humidityEntries.add(Entry(4f, 70f)) // 第5天湿度70%
        humidityEntries.add(Entry(5f, 78f)) // 第6天湿度78%
        humidityEntries.add(Entry(6f, 73f)) // 第7天湿度73%

        // 创建数据集,设置折线的样式
        val dataSet = LineDataSet(humidityEntries, "山谷日湿度变化")
        dataSet.color = ColorTemplate.MATERIAL_COLORS[1] // 折线用绿色
        dataSet.setCircleColor(ColorTemplate.MATERIAL_COLORS[1]) // 数据点用绿色实心圆
        dataSet.lineWidth = 2f // 折线粗细
        dataSet.circleRadius = 4f // 数据点大小
        dataSet.setDrawCircleHole(false) // 不显示数据点的空心
        dataSet.valueTextSize = 10f // 数据值的字体大小
        dataSet.setDrawFilled(true) // 填充折线下方的区域(需要API 18+)
        dataSet.fillColor = ColorTemplate.MATERIAL_COLORS[1].copy(alpha = 80) // 填充色半透明

        // 把数据集添加到LineData里,再设置给图表
        val dataSets = arrayListOf<ILineDataSet>(dataSet)
        val lineData = LineData(dataSets)
        lineChart.data = lineData

        // 刷新图表,让数据显示出来
        lineChart.invalidate()
    }
}
效果说明(模拟图描述)

实现后的折线图效果:顶部显示图例“山谷日湿度变化”,X轴对应7天的时间节点(你可以自定义X轴的文字标签,比如换成“周一”到“周日”),Y轴是湿度百分比;折线为半透明绿色,每个数据点有实心绿色圆点,折线下方有淡绿色半透明填充;支持拖拽查看细节、双指缩放调整视图,触摸数据点会弹出对应的湿度数值。

常见错误排查
  • 依赖同步失败:检查settings.gradle里是否添加了jitpack仓库,或者依赖版本号是否正确
  • 填充效果不显示:确保项目的minSdkVersion >=18,并且已经设置了dataSet.setDrawFilled(true)和填充色
  • 数据不显示:检查Entry的X值是否连续,或者是否忘记调用lineChart.invalidate()刷新图表

内容的提问来源于stack exchange,提问作者MaksChojniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 06:02:41