2016-05-16 109 views
0

我试图在我的饼图中使用MarkView。跟随此文档https://github.com/PhilJay/MPAndroidChart/wiki/MarkerViewMPAndroidChart饼图MarkView不起作用

不幸的是,当我点击任何值时,它会发生错误。

我的活动看起来喜欢这个

mChart = (PieChart) findViewById(R.id.chart1); 
    mChart.setDescription(""); 

    typeface = Typeface.createFromAsset(getAssets(), "OpenSans-Light.ttf"); 

    mChart.setCenterTextTypeface(typeface); 
    mChart.setCenterText(generateCenterText()); 
    mChart.setCenterTextSize(15f); 
    mChart.setCenterTextTypeface(typeface); 

    // radius of the center hole in percent of maximum radius 
    mChart.setHoleRadius(45f); 
    mChart.setTransparentCircleRadius(50f); 

    mChart.getLegend().setEnabled(false); 
    mChart.setData(generatePieData()); 

    mChart.animateX(1500, Easing.EasingOption.EaseOutBounce); 
    //mChart.animateY(1500, Easing.EasingOption.EaseInOutQuad); 

    mChart.setTouchEnabled(true); 

    CustomMarkerView mv = new CustomMarkerView (this, R.layout.custom_marker_view_layout); 
    mChart.setMarkerView(mv); 

这是我的标志类

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

,这里是我的布局

<?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/marker" > 

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

,但我总是得到这个错误...

05-16 07:50:06.321 23967-23967/com.anwarhossainbd.bdelectricbillcalculator E/AndroidRuntime: FATAL EXCEPTION: main 
      Process: com.anwarhossainbd.bdelectricbillcalculator, PID: 23967 
      java.lang.NullPointerException: Attempt to read from field 'float com.github.mikephil.charting.components.AxisBase.mAxisRange' on a null object reference 
       at com.github.mikephil.charting.charts.Chart.drawMarkers(Chart.java:673) 
       at com.github.mikephil.charting.charts.PieChart.onDraw(PieChart.java:136) 
       at android.view.View.draw(View.java:16178) 
       at android.view.View.updateDisplayListIfDirty(View.java:15174) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3593) 
       at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3573) 
       at android.view.View.updateDisplayListIfDirty(View.java:15134) 
       at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:281) 
       at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:287) 
       at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:322) 
       at android.view.ViewRootImpl.draw(ViewRootImpl.java:2615) 
       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434) 
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067) 
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
       at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
       at android.view.Choreographer.doFrame(Choreographer.java:606) 
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
       at android.os.Handler.handleCallback(Handler.java:739) 
       at android.os.Handler.dispatchMessage(Handler.java:95) 
       at android.os.Looper.loop(Looper.java:148) 
       at android.app.ActivityThread.main(ActivityThread.java:5417) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

有帮助吗?

回答

1

我想你使用的是这个库的旧版本。我有同样的问题,我没有搜索,然后我发现这个话题。

https://github.com/PhilJay/MPAndroidChart/issues/1713

它应固定在V2.2.4。您可以使用新版本的库jar文件更新您的库。

出于某种原因,带gradle的v2.2.4不适用于我,我使用“com.github.PhilJay:MPAndroidChart:-SNAPSHOT”来实现库的新版本。你也可以试试这个