2016-05-16 4 views
0

Ich habe versucht, die MarkView in meinem Kreisdiagramm zu verwenden. folgte diesem doc https://github.com/PhilJay/MPAndroidChart/wiki/MarkerViewMPAndroidChart Kreisdiagramm MarkView funktioniert nicht

Leider gibt es Fehler, wenn ich auf einen Wert klicken.

meine Tätigkeit sieht gefällt dieses

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

das ist mein Marker Klasse

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

und hier ist mein Layout

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

aber ich immer diese Fehlermeldung erhalten ...

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) 

Hilfe?

Antwort

1

Ich denke, Sie verwenden ältere Version dieser Bibliothek. Ich hatte dasselbe Problem und ich habe wenig Suche dann fand ich dieses Thema.

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

Es sollte in v2.2.4 fixiert werden. Sie können Ihre Bibliothek mit einer neuen Version der Bibliotheks-JAR-Datei aktualisieren.

Aus irgendeinem Grund funktionierte v2.2.4 mit Gradle nicht für mich und ich verwendete "com.github.PhilJay: MPAndroidChart: -SNAPSHOT", um eine neue Version der Bibliothek zu implementieren. Sie können dieses auch

versuchen