使用kotlin的MPAndroidChart中的xAsis毫秒到HH:mm格式
我正在创建一个程序,它将根据时基以“HH:mm”格式显示数据,但我的代码没有格式化我的xAsis 我正在尝试不同的方式格式化,但它不像下面的代码那样工作使用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
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()
}
}
}
}