【问题标题】:Show a label when a value is selected [MPAndroidChart]选择值时显示标签 [MPAndroidChart]
【发布时间】:2017-09-13 23:56:45
【问题描述】:

我想在选择一个值时显示一个带有特定数据的标签,就像在我想要的演示图像中一样:

所以我粘贴了这段代码(在示例的源代码中找到):

protected RectF mOnValueSelectedRectF = new RectF();

@Override
public void onValueSelected(Entry e, Highlight h) {

    if (e == null)
        return;

    RectF bounds = mOnValueSelectedRectF;
    mChart.getBarBounds((BarEntry) e, bounds);
    MPPointF position = mChart.getPosition(e, AxisDependency.LEFT);

    Log.i("bounds", bounds.toString());
    Log.i("position", position.toString());

    Log.i("x-index",
            "low: " + mChart.getLowestVisibleX() + ", high: "
                    + mChart.getHighestVisibleX());

    MPPointF.recycleInstance(position);
}

但它不起作用,显示日志但屏幕上没有任何反应。 我忘记或错过了什么

【问题讨论】:

    标签: android mpandroidchart


    【解决方案1】:

    要在选择值时显示带有内部内容的标记,我们必须使用 MarkerView 而不是 valueSelected 侦听器。

    创建你的所有必要的文档都在这里: https://github.com/PhilJay/MPAndroidChart/wiki/IMarker-Interface

    【讨论】:

    • 我想补充一点,MPChartExample 项目中有一个可以使用的标记
    【解决方案2】:

    您是否在代码中的行下面写了?

    mChart.setOnChartValueSelectedListener(this);
    

    【讨论】:

    • 是的,当我点击我的栏时,监听器被很好地调用了,因为日志会显示出来。
    • 这意味着当您单击栏时,不显示带有值的标签。我说的对吗?
    • 我不想显示里面写着“x: 3rd Jan y: 31.3”的气泡。
    【解决方案3】:

    这是一个更简单的解决方案:

    第 1 步: 我们不需要在条上显示值,所以:

    binding.barchart.setDrawValueAboveBar(false)
    

    第 2 步: 要使值显示在条形图上(假设 DataSet 中只有 1 个 barDataset):

    binding.barchart.data.dataSets[0].setDrawValues(true)
    binding.barchart.data.dataSets[0].valueTextColor = ContextCompat.getColor(requireContext(),android.R.color.transparent)
    

    这将使值最初在条形图上不可见

    第 3 步:

    barchart.setTouchEnabled(true)
    barchart.setOnChartValueSelectedListener(object : OnChartValueSelectedListener{
                override fun onValueSelected(e: Entry?, h: Highlight?) {
                    if(selectedEntry!=e){
                        barchart.data.dataSets[0].setValueTextColors(getValColors(e!!.x))
                    }
                }
    
                override fun onNothingSelected() {
                    barchart.data.dataSets[0].valueTextColor = ContextCompat.getColor(requireContext(),android.R.color.transparent)
                }
    
            })
    
    private fun getValColors(xAxis: Float):ArrayList<Int>{
            return arrayListOf<Int>().apply {
                for(i in 0 until(23)){
                    if(xAxis.toInt()==i){
                        add(ContextCompat.getColor(requireContext(),android.R.color.white))
                    }else{
                        add(ContextCompat.getColor(requireContext(),android.R.color.transparent))
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多