java 点击时显示值 [MPAndroidChart]

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33241952/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 21:24:49  来源:igfitidea点击:

Show value when tapped [MPAndroidChart]

javaandroidlinechartmpandroidchart

提问by Rod_Algonquin

I`ve been looking for a way to enable the MPAndroidChart to only display the value(label) of data point when clicked. But It seems that I could not find it online even in the documentation.

我一直在寻找一种方法,使 MPAndroidChart 仅在单击时显示数据点的值(标签)。但似乎即使在文档中我也无法在网上找到它。

I used the line chartand what I want is to only display the label of the certain point when clicked.

我使用了line chart,我想要的是仅在单击时显示特定点的标签。

回答by rafaelasguerra

1- Enable touchin the chart

1-在图表中启用触摸

chart.setTouchEnabled(true);

2 - Create MarkerView

2 -创建 MarkerView

public class CustomMarkerView extends MarkerView {

    private TextView tvContent;
    public CustomMarkerView (Context context, int layoutResource) {
        super(context, layoutResource);
        // this markerview only displays a textview
        tvContent = (TextView) findViewById(R.id.tvContent);
    }

    // callbacks everytime the MarkerView is redrawn, can be used to update the
    // content (user-interface)
    @Override
    public void refreshContent(Entry e, Highlight highlight) {
        tvContent.setText("" + e.getVal()); // set the entry-value as the display text
    }

    @Override
    public int getXOffset() {
        // this will center the marker-view horizontally
        return -(getWidth() / 2);
    }

    @Override
    public int getYOffset() {
        // this will cause the marker-view to be above the selected value
        return -getHeight();
    }
}

3 - Create the tvContent view

3 - 创建tvContent 视图

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="40dp"
    android:background="@drawable/markerImage" >

    <TextView
        android:id="@+id/tvContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="7dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:text=""
        android:textSize="12dp"
        android:textColor="@android:color/white"
        android:ellipsize="end"
        android:singleLine="true"
        android:textAppearance="?android:attr/textAppearanceSmall" />

</RelativeLayout>

4.Set the view Marker in the chart

4.在图表中设置view Marker

CustomMarkerView mv = new CustomMarkerView (Context, R.layout.custom_marker_view_layout);
chart.setMarkerView(mv);

https://github.com/PhilJay/MPAndroidChart/wiki/MarkerView

https://github.com/PhilJay/MPAndroidChart/wiki/MarkerView

回答by Andrea Scalabrini

Use IMarker Interface(MarkerView has been deprecated since release 3.0.0)

使用IMarker 接口(MarkerView 自 3.0.0 版以来已被弃用)

1. Create a new class that implements the IMarker interface

1.新建一个实现IMarker接口的类

public class YourMarkerView extends MarkerView {

private TextView tvContent;

public MyMarkerView(Context context, int layoutResource) {
    super(context, layoutResource);

    // find your layout components
    tvContent = (TextView) findViewById(R.id.tvContent);
}

// callbacks everytime the MarkerView is redrawn, can be used to update the
// content (user-interface)
@Override
public void refreshContent(Entry e, Highlight highlight) {

    tvContent.setText("" + e.getY());

    // this will perform necessary layouting
    super.refreshContent(e, highlight);
}

private MPPointF mOffset; 

@Override
public MPPointF getOffset() {

    if(mOffset == null) {
       // center the marker horizontally and vertically
       mOffset = new MPPointF(-(getWidth() / 2), -getHeight());
    }

    return mOffset;
}}

2. set your marker to the chart

2. 将标记设置为图表

IMarker marker = new YourMarkerView();
chart.setMarker(marker);

Reference: https://github.com/PhilJay/MPAndroidChart/wiki/IMarker-Interface

参考:https: //github.com/PhilJay/MPAndroidChart/wiki/IMarker-Interface