【问题标题】:How to insert Date value in X axis of mpandroidchart using kotlin如何使用 kotlin 在 mpandroidchart 的 X 轴中插入日期值
【发布时间】:2019-05-16 03:06:17
【问题描述】:

我需要将日期值插入我的 X 轴,但 X 轴只接受浮点值,但是当我尝试将我的日期格式化为时间戳然后转换为浮点时它仍然不接受该值。 .

下面是我的代码 sn-p 。

    private fun loadDate(){
        mLineChart = findViewById(R.id.chart)
        dataList = ArrayList()
        val stringRequest = StringRequest(
            Request.Method.GET, URL,
            Listener { response ->
                Log.d("JSONResult", response.toString())
                try {
                    //converting the string to json array object
                    var array = JSONArray(response)

                    //traversing through all the object
                    for (i in 0 until array.length()) {

                        var stationData = array.getJSONObject(i)
                        //adding the product to product list
                        dataList.add(Data(
                            stationData.getString("id"),
                            stationData.getString("station_name"),
                            stationData.getString("date_time"),
                            stationData.getString("pm25_10min_avg")
                        ))
                    }

                    var i = 0
                    val df = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
                    for (data in dataList) {
                        if (data.name == navBarTitle) {
                            val date = df.parse(data.date)
                            val pm = java.lang.Float.parseFloat(data.pm)
                            entries.add(Entry(date.time.toFloat(), water))
                        }
                    }

                    val set1 = LineDataSet(entries, "pm25_10min_avg")
                    set1.fillAlpha = 110

                    var dataSet = java.util.ArrayList<ILineDataSet>()
                    dataSet.add(set1)

                    val lineData = LineData(dataSet)
                    mLineChart.data = lineData

                    set1.color = Color.RED
                    set1.mode = LineDataSet.Mode.HORIZONTAL_BEZIER
                    set1.setCircleColor(Color.RED)
                    set1.setDrawCircleHole(false)
                    set1.setDrawValues(false)
                    mLineChart.description.text = ""
                    mLineChart.invalidate()
                    mLineChart.axisRight.isEnabled = false
                    mLineChart.axisLeft.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
                    mLineChart.axisRight.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)

                    val legend = mLineChart.legend
                    legend.isEnabled = true
                    legend.verticalAlignment = Legend.LegendVerticalAlignment.TOP
                    legend.horizontalAlignment = Legend.LegendHorizontalAlignment.LEFT
                    legend.orientation = Legend.LegendOrientation.HORIZONTAL
                    legend.textSize = 15f

                    val xAxis = mLineChart.xAxis
                    xAxis.position = XAxis.XAxisPosition.BOTTOM
                    xAxis.setDrawGridLines(false)
                    xAxis.labelCount = 6
                    xAxis.granularity = 1F
                    xAxis.isGranularityEnabled = true


                    val dateFormatter = SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.ENGLISH)
                    val sdf = SimpleDateFormat("HH:mm", Locale.ENGLISH)
                    for (data in dataList) {
                        if (data.name == navBarTitle) {
                            val date = dateFormatter.parse(data.date)
                            val time = sdf.format(date)
                            formatedXVal.add(time)
                        }
                    }

                    xAxis.valueFormatter = IndexAxisValueFormatter(formatedXVal)

                    val mv = MyMarkerView(this, R.layout.markerview)
                    mv.chartView = chart // For bounds control
                    chart!!.marker = mv

                } catch (e: NullPointerException) {
                    e.printStackTrace()

                } catch (e: JSONException) {
                    e.printStackTrace()
                }
            },
            Response.ErrorListener { error ->
                error.printStackTrace()
                Toast.makeText(this@AqiAnalysisActivity, error.message, Toast.LENGTH_LONG).show()})
        Volley.newRequestQueue(this).add(stringRequest)
    }

【问题讨论】:

    标签: android kotlin mpandroidchart


    【解决方案1】:

    对于 Java:

    将您的 XAxis 标签添加到 ArrayList

    使用以下代码显示日期。

        final ArrayList<String> xLabel = new ArrayList<>();
        Calendar calendar = Calendar.getInstance();
        DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
    
        for(int i=0;i<=50;i++){
            calendar.add(Calendar.DAY_OF_YEAR, i);
            Date date= calendar.getTime();
            String txtDate= dateFormat.format(date);
    
            xLabel.add(txtDate);
        }
    
        // or use some other logic to save your data in list. For ex. 
        for(i=1; i<50; i+=2)
        { 
           xLabel.add(""+3*i);
        }
    

    然后在 setValueFormatter 中使用这个标签。

        XAxis xAxis = mChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setValueFormatter(new IAxisValueFormatter() {
           @Override
           public String getFormattedValue(float value, AxisBase axis) {
               return xLabel.get((int)value);
           }
       });
    

    对于 Kotlin:

    val xLabel = ArrayList<String>()
       val calendar = Calendar.getInstance()
       val dateFormat = SimpleDateFormat("dd-MMM-yyyy")
    
       for (i in 0..50) {
           calendar.add(Calendar.DAY_OF_YEAR, i)
           val date = calendar.time
           val txtDate = dateFormat.format(date)
    
           xLabel.add(txtDate)
       }
    
       // or use some other logic to save your data in list. For ex.
       var i = 1
       while (i < 50) {
            xLabel.add("" + 3 * i)
            i += 2
       }
    

    然后在 setValueFormatter 中使用这个标签。

       val xAxis = mChart.xAxis
       xAxis.position = XAxis.XAxisPosition.BOTTOM
       xAxis.setDrawGridLines(false)
       xAxis.valueFormatter = IAxisValueFormatter { value, axis -> xLabel[value.toInt()] }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2017-05-16
      • 2015-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多