kotlin MPAndroidChart barchart的markview(悬浮窗)实现

253 阅读1分钟

首先制作一个xml 名字叫marker_views

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="72dp"
    android:layout_height="48dp"
    android:background="@drawable/bg_marker"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/tv_content_marker_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:text="123"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textColor="@android:color/white"
        android:textSize="18sp" />
</LinearLayout>

然后写一个activaty

import android.content.Context
import android.view.View
import android.widget.TextView
import com.github.mikephil.charting.components.MarkerView
import com.github.mikephil.charting.data.Entry
import com.github.mikephil.charting.highlight.Highlight
import com.github.mikephil.charting.utils.MPPointF


class MyMarkerView(context: Context?, layoutResource: Int) :
    MarkerView(context, layoutResource) {
    private val mContentTv: TextView = findViewById<View>(R.id.marker_views) as TextView
    override fun refreshContent(e: Entry?, highlight: Highlight?) {
        mContentTv.text = e!!.y.toString()
    }
    override fun getOffset(): MPPointF {
        return MPPointF((-(width / 2)).toFloat(), (-(1000)).toFloat())
    }
}

然后在mainactivity里面

val mv: MarkerView = MyMarkerView(this, R.layout.content_marker_view)
        mBarChart!!.data = mBarData
        mBarChart!!.setDrawMarkers(true)
        mBarChart!!.markerView = mv

即可