2016-04-18 60 views
5

我使用MPandroidchart用於顯示在我的application.I線圖了添加以下代碼顯示標記查看,但沒有顯示在MarkerView沒有顯示使用MPAndroidChart

private void initializeChart(LineChart chart, String chartName) { 
    // Chart view 
    chart.setDrawGridBackground(false); 
    chart.setDescription(""); 
    chart.getLegend().setEnabled(true); 
    //chart.setTouchEnabled(false); 
    int color = getResources().getColor(R.color.white); 
    chart.getAxisLeft().setTextColor(color); // left y-axis 
    chart.getXAxis().setTextColor(color); 

    chart.setTouchEnabled(true); 
    CustomMarkerView mv = new CustomMarkerView(this.getActivity(), R.layout.marker_view_tv); 
    chart.setMarkerView(mv); 

    //X axis 
    XAxis xAxis = chart.getXAxis(); 
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); 
    xAxis.setDrawGridLines(false); 
    xAxis.setDrawLabels(true); 

    //Y axis 
    YAxis leftAxis = chart.getAxisLeft(); 
    YAxis rightAxis = chart.getAxisRight(); 
    rightAxis.setDrawLabels(false); 
    rightAxis.setDrawGridLines(false); 
    leftAxis.setDrawLabels(true); 
    leftAxis.setDrawGridLines(false); 
    leftAxis.setStartAtZero(false); 

    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getActivity()); 


    leftAxis.setLabelCount(Constants.KEY_LINE_YAXIS_SCALECOUNT, true); 
    ChartItem item = CannonJsonParser.parseCanonJson(act, act.res); 
    int maxYVal = pref.getInt(Constants.KEY_YAXIS_VALUE, 0); 
    leftAxis.setAxisMaxValue(maxYVal); 
    leftAxis.setAxisMinValue(0); 
    setLineData(item, chartName); 
    // set data 
    chart.setData(lineData); 

    chart.getLegend().setEnabled(false); 
    //animate 
    //chart.animateX(2000, Easing.EasingOption.EaseInExpo); 
    chart.setDragEnabled(true); 
    chart.setScaleXEnabled(true); 
    chart.setScaleYEnabled(false); 
    chart.setHighlightPerDragEnabled(false); 
    chart.setHighlightPerTapEnabled(false); 


} 

我CustomMarkerView類

public class CustomMarkerView extends MarkerView { 
private TextView tvContent; 

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

    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) { 

    if (e instanceof CandleEntry) { 

     CandleEntry ce = (CandleEntry) e; 

     tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true)); 
    } else { 

     tvContent.setText("" + Utils.formatNumber(e.getVal(), 0, true)); 
    } 
} 

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

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

}

注:我使用的片段顯示圖表。

回答

4

MarkerView沒有展示,因爲你還沒有凸顯您圖表中的任何條目MarkerView僅針對突出顯示的條目顯示。

既然你禁用突出每分頭項(通過調用chart.setHighlightPerTapEnabled(false))的功能,你可以只強調值編程,就像這樣:

chart.highlightValue(...)

更多,在documentation

1

試試這個,類

import android.content.Context; 
import android.widget.TextView; 

import com.github.mikephil.charting.components.MarkerView; 
import com.github.mikephil.charting.data.CandleEntry; 
import com.github.mikephil.charting.data.Entry; 
import com.github.mikephil.charting.utils.Utils; 

/** 
* Custom implementation of the MarkerView. 
* 
* @author Philipp Jahoda 
*/ 
public class MyMarkerView extends MarkerView { 

    private TextView tvContent; 

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

     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, int dataSetIndex) { 

     if (e instanceof CandleEntry) { 

      CandleEntry ce = (CandleEntry) e; 

      tvContent.setText("" + Utils.formatNumber(ce.getHigh(), 0, true)); 
     } else { 

      tvContent.setText("" + Utils.formatNumber(e.getVal(), 0, true)); 
     } 
    } 

    @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(); 
    } 
} 

而在片段類,添加

 MyMarkerView mv = new MyMarkerView(this.getActivity(), R.layout.custom_marker_view); 

     // set the marker to the chart 
     mChart.setMarkerView(mv); 

願這對您有幫助..