Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用kotlin的MPAndroidChart中的xAsis毫秒到HH:mm格式_Android_Kotlin_Mpandroidchart - Fatal编程技术网

使用kotlin的MPAndroidChart中的xAsis毫秒到HH:mm格式

使用kotlin的MPAndroidChart中的xAsis毫秒到HH:mm格式,android,kotlin,mpandroidchart,Android,Kotlin,Mpandroidchart,我正在创建一个程序,它将根据时基以“HH:mm”格式显示数据,但我的代码没有格式化我的xAsis 我正在尝试不同的方式格式化,但它不像下面的代码那样工作 xAxis.valueFormatter = IAxisValueFormatter { value, _-> SimpleDateFormat("HH:mm", Locale.ENGLISH).format(value.toLong()) } as ValueFormatter 还有这个 xAxis.valueForm

我正在创建一个程序,它将根据时基以“HH:mm”格式显示数据,但我的代码没有格式化我的xAsis

我正在尝试不同的方式格式化,但它不像下面的代码那样工作

    xAxis.valueFormatter = IAxisValueFormatter { value, _-> SimpleDateFormat("HH:mm", Locale.ENGLISH).format(value.toLong()) } as ValueFormatter
还有这个

    xAxis.valueFormatter = formatter

    var formatter: ValueFormatter  = object : ValueFormatter() {

                    // we don't draw numbers, so no decimal digits needed
                    var sdf = SimpleDateFormat("HH:mm", Locale.ENGLISH)

                    override fun getFormattedValue(value: Float, axis: AxisBase): String {
                        return sdf.format(value)
                    }
                }
我的实际结果必须是HH:mm格式

下面是更新的代码片段

    class MainActivity : AppCompatActivity() {
private lateinit var mLineChart: LineChart
private var entries = java.util.ArrayList<Entry>()

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

    mLineChart = findViewById(R.id.chart)

    entries.add(Entry(0f, 5f))
    entries.add(Entry(1f, 10f))
    entries.add(Entry(2f, 15f))
    entries.add(Entry(3f, 20f))
    entries.add(Entry(4f, 5f))
    entries.add(Entry(5f, 10f))

    val set1 = LineDataSet(entries, "Water")
    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.CUBIC_BEZIER
    mLineChart.description.text = ""
    mLineChart.legend.isEnabled = false
    mLineChart.invalidate()
    mLineChart.axisRight.isEnabled = false
    mLineChart.axisLeft.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
    mLineChart.axisRight.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)


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

    val xValsDateLabel = ArrayList<String>()

    val xValsOriginalMillis = ArrayList<Long>()
    xValsOriginalMillis.add(1554875423736L)
    xValsOriginalMillis.add(1555275494836L)
    xValsOriginalMillis.add(1585578525900L)
    xValsOriginalMillis.add(1596679626245L)
    xValsOriginalMillis.add(1609990727820L)
    xValsOriginalMillis.add(1709990727820L)

    for (i in xValsOriginalMillis) {
        val mm = i / 60 % 60
        val hh = i / (60 * 60) % 24
        val mDateTime = "$hh:$mm"
        xValsDateLabel.add(mDateTime)
    }

    xAxis.valueFormatter = IAxisValueFormatter { value, axis ->
        if (xValsDateLabel != null && value.toInt() >= 0
            && value.toInt() <= xValsDateLabel!!.size - 1) {
            xValsDateLabel!![value.toInt()].toString()
        } else {
            ("").toString()
        }
    } as ValueFormatter
} }

要在MpAndroidChart中以xAxis的日期/时间格式显示值,请执行以下操作:

首先获取名为“xValsDateLabel”的字符串arraylist,如下所示:

val xValsDateLabel = ArrayList<String>()
for (i in xValsOriginalMillis.indices) {
            val mm = xValsOriginalMillis[i] / 60 % 60
            val hh = xValsOriginalMillis[i] / (60 * 60) % 24
            val mDateTime = "$hh:$mm"
            xValsDateLabel.add(mDateTime)
        }
class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {

        override fun getFormattedValue(value: Float): String {
            return value.toString()
        }

        override fun getAxisLabel(value: Float, axis: AxisBase): String {
            if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
                return xValsDateLabel[value.toInt()]
            } else {
                return ("").toString()
            }
        }
    }
现在按如下格式设置xAxis值:

val xValsDateLabel = ArrayList<String>()
for (i in xValsOriginalMillis.indices) {
            val mm = xValsOriginalMillis[i] / 60 % 60
            val hh = xValsOriginalMillis[i] / (60 * 60) % 24
            val mDateTime = "$hh:$mm"
            xValsDateLabel.add(mDateTime)
        }
class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {

        override fun getFormattedValue(value: Float): String {
            return value.toString()
        }

        override fun getAxisLabel(value: Float, axis: AxisBase): String {
            if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
                return xValsDateLabel[value.toInt()]
            } else {
                return ("").toString()
            }
        }
    }
您好,我已按如下方式编辑了我的答案:(存在类型不匹配错误,因为您正在“条目”数组列表中添加浮点值)

注意:请尝试在中添加相同数量的数组列表项 “XvaloriginalMillis”与“entries”arraylist中的相同,否则它将 为您提供ArrayIndexOutOfBound异常

class MainLineActivity:AppCompatActivity(){
私有lateinit var mLineChart:折线图
private var entries=java.util.ArrayList()
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u主线)
mLineChart=findViewById(R.id.线形图)
条目。添加(条目(0f、5f))
条目。添加(条目(1f、10f))
条目。添加(条目(2f、15f))
条目。添加(条目(3f、20f))
条目。添加(条目(4f、5f))
条目。添加(条目(5f、10f))
//Log.d(“itoNa”,“$entries”)
val set1=LineDataSet(条目“水”)
set1.fillAlpha=110
var dataSet=java.util.ArrayList()
dataSet.add(set1)
val lineData=lineData(数据集)
mLineChart.data=线路数据
set1.color=color.RED
set1.mode=LineDataSet.mode.CUBIC_BEZIER
mLineChart.description.text=“”
mLineChart.legend.isEnabled=false
mLineChart.invalidate()
mLineChart.axisRight.isEnabled=false
mLineChart.axisLeft.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_图表)
mLineChart.axisRight.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_图表)
val xAxis=mLineChart.xAxis
xAxis.position=xAxis.XAxisPosition.BOTTOM
xAxis.setDrawGridLines(false)
xAxis.labelCount=4
xAxis.granularity=1f
xAxis.isGranularityEnabled=true
val xValsDateLabel=ArrayList()
val xValoriginalMillis=ArrayList()
xValsOriginalMillis.add(1554875423736L)
xValsOriginalMillis.add(1555275494836L)
XvalsoriginalMills.添加(1585578525900L)
Xvaloriginalmillis.添加(15966796245L)
Xvaloriginalmillis.添加(1609990727820L)
Xvaloriginalmillis.添加(1709990727820L)
用于(以xvaloriginalmillis表示的i){
val mm=i/60%60
val hh=i/(60*60)%24
val mDateTime=“$hh:$mm”
xValsDateLabel.add(mDateTime)
}
xAxis.valueFormatter=(MyValueFormatter(xValsDateLabel))
}
类MyValueFormatter(私有val xValsDateLabel:ArrayList):ValueFormatter(){
重写getFormattedValue(值:Float):字符串{
返回值.toString()
}
重写getAxisLabel(值:浮点,轴:AxisBase):字符串{

如果(value.toInt()>=0&&value.toInt(),您能否详细描述您到底想要什么,如果您共享屏幕截图或ui,效果会更好。我想使用函数valueFormatter将我的线状图x asis格式化为HH:mm时基im,但不是working@android!它需要看起来像链接
getFormattedValue上的图像(value:Float,axis:AxisBase)
我认为这种方法已被弃用
class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {

        override fun getFormattedValue(value: Float): String {
            return value.toString()
        }

        override fun getAxisLabel(value: Float, axis: AxisBase): String {
            if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
                return xValsDateLabel[value.toInt()]
            } else {
                return ("").toString()
            }
        }
    }
xAxis.valueFormatter = (MyValueFormatter(xValsDateLabel))
class MainLineActivity : AppCompatActivity() {

    private lateinit var mLineChart: LineChart
    private var entries = java.util.ArrayList<Entry>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main_line)
        mLineChart = findViewById(R.id.lineChart)

        entries.add(Entry(0f, 5f))
        entries.add(Entry(1f, 10f))
        entries.add(Entry(2f, 15f))
        entries.add(Entry(3f, 20f))
        entries.add(Entry(4f, 5f))
        entries.add(Entry(5f, 10f))
        // Log.d("itoNa", "$entries")

        val set1 = LineDataSet(entries, "Water")
        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.CUBIC_BEZIER
        mLineChart.description.text = ""
        mLineChart.legend.isEnabled = false
        mLineChart.invalidate()
        mLineChart.axisRight.isEnabled = false
        mLineChart.axisLeft.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)
        mLineChart.axisRight.setPosition(YAxis.YAxisLabelPosition.OUTSIDE_CHART)


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

        val xValsDateLabel = ArrayList<String>()

        val xValsOriginalMillis = ArrayList<Long>()
        xValsOriginalMillis.add(1554875423736L)
        xValsOriginalMillis.add(1555275494836L)
        xValsOriginalMillis.add(1585578525900L)
        xValsOriginalMillis.add(1596679626245L)
        xValsOriginalMillis.add(1609990727820L)
        xValsOriginalMillis.add(1709990727820L)

        for (i in xValsOriginalMillis) {
            val mm = i / 60 % 60
            val hh = i / (60 * 60) % 24
            val mDateTime = "$hh:$mm"
            xValsDateLabel.add(mDateTime)
        }

        xAxis.valueFormatter = (MyValueFormatter(xValsDateLabel))
    }


    class MyValueFormatter(private val xValsDateLabel: ArrayList<String>) : ValueFormatter() {

        override fun getFormattedValue(value: Float): String {
            return value.toString()
        }

        override fun getAxisLabel(value: Float, axis: AxisBase): String {
            if (value.toInt() >= 0 && value.toInt() <= xValsDateLabel.size - 1) {
                return xValsDateLabel[value.toInt()]
            } else {
                return ("").toString()
            }
        }
    }

}