如何给MPAndroidChart添加非标准背景及解决组合图表交互问题
解决MPAndroidChart组合图的两个遗留问题
一、禁止折线触摸选中,仅保留散点响应
直接给LineDataSet设置禁用高亮,同时确保散点的高亮开启即可,这样触摸时只有散点会被选中响应:
// 禁用折线的高亮选中 lineDataSet.isHighlightEnabled = false // 确保散点允许高亮(默认是true,可明确设置) scatterDataSet.isHighlightEnabled = true // 可选:确保组合图的触摸和高亮功能开启(默认已开启) combinedChart.setTouchEnabled(true) combinedChart.highlightPerTapEnabled = true combinedChart.highlightPerDragEnabled = true
设置后,折线不会响应任何触摸选中事件,只有散点会在触摸时显示高亮标记。
二、绘制非坐标轴范围的填充区域
如果要绘制超出当前坐标轴显示范围的填充区域,不能依赖DataSet自带的填充(受限于数据和坐标轴范围),可以通过自定义CombinedChart重写onDraw方法来实现,直接在画布上绘制需要的区域:
步骤1:自定义CombinedChart类
import android.content.Context import android.graphics.Canvas import android.graphics.Color import android.graphics.Paint import android.util.AttributeSet import com.github.mikephil.charting.charts.CombinedChart class CustomCombinedChart(context: Context, attrs: AttributeSet?) : CombinedChart(context, attrs) { // 初始化填充画笔,设置颜色和样式 private val fillPaint = Paint().apply { color = Color.parseColor("#804CAF50") // 半透明绿色,可自行调整 style = Paint.Style.FILL } override fun onDraw(canvas: Canvas) { super.onDraw(canvas) // 这里以绘制x从-5到15,y从2到8的填充区域为例 // 将数据坐标转换为屏幕坐标 val transformer = getTransformer(YAxis.AxisDependency.LEFT) val leftX = transformer.getPixelForX(-5f) val rightX = transformer.getPixelForX(15f) val topY = transformer.getPixelForY(8f) val bottomY = transformer.getPixelForY(2f) // 绘制填充矩形 canvas.drawRect(leftX, topY, rightX, bottomY, fillPaint) } }
步骤2:在布局中使用自定义Chart
把原来布局里的CombinedChart替换成你自定义的CustomCombinedChart:
<com.yourpackage.CustomCombinedChart android:id="@+id/combinedChart" android:layout_width="match_parent" android:layout_height="match_parent" />
这种方式可以自由绘制任何范围的填充区域,不受当前坐标轴显示范围的限制,你只需要调整代码中的x、y坐标值和画笔颜色即可。
内容的提问来源于stack exchange,提问作者Roman Sinetsky
相关产品推荐
相关产品推荐

