Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MPAndroidChart全宽,Y轴标签位于内部_Android_Mpandroidchart - Fatal编程技术网

MPAndroidChart全宽,Y轴标签位于内部

MPAndroidChart全宽,Y轴标签位于内部,android,mpandroidchart,Android,Mpandroidchart,我在将图表设置为全宽时遇到问题;使Y轴位于x坐标0处,图形右侧处于全宽 设置图形时,我执行以下操作: setDrawGridBackground(false); setDrawBorders(false); getLegend().setEnabled(false); setAutoScaleMinMaxEnabled(true); setTouchEnabled(true); setDragEnabled(true); setScaleE

我在将图表设置为全宽时遇到问题;使Y轴位于x坐标0处,图形右侧处于全宽

设置图形时,我执行以下操作:

    setDrawGridBackground(false);
    setDrawBorders(false);
    getLegend().setEnabled(false);
    setAutoScaleMinMaxEnabled(true);
    setTouchEnabled(true);
    setDragEnabled(true);
    setScaleEnabled(true);
    setPinchZoom(true);
    setDoubleTapToZoomEnabled(false);
    setBackgroundColor(Color.TRANSPARENT);
    getAxisRight().setEnabled(false);
    getDescription().setEnabled(false);

    final YAxis yAxis = getAxisLeft();
    yAxis.setLabelCount(4,true);
    yAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
    yAxis.setValueFormatter(new TemperatureValueFormatter());
    yAxis.setTextColor(Color.WHITE);
    yAxis.setGridColor(Color.argb(102,255,255,255));
    yAxis.setAxisLineColor(Color.TRANSPARENT);

    final XAxis xAxis = getXAxis();
    xAxis.setDrawLimitLinesBehindData(true);
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTextColor(Color.WHITE);
    xAxis.disableGridDashedLine();
    xAxis.setDrawGridLines(false);
    xAxis.setGridColor(Color.argb(204,255,255,255));
    xAxis.setAxisLineColor(Color.TRANSPARENT);
    xAxis.setValueFormatter(new TimestampValueFormatter());
    xAxis.setLabelCount(4);
    xAxis.setAvoidFirstLastClipping(true);
    xAxis.setSpaceMin(10f);
invalidate();
fitScreen();
添加初始数据或使用动态数据更新后,我调用以下命令:

    setDrawGridBackground(false);
    setDrawBorders(false);
    getLegend().setEnabled(false);
    setAutoScaleMinMaxEnabled(true);
    setTouchEnabled(true);
    setDragEnabled(true);
    setScaleEnabled(true);
    setPinchZoom(true);
    setDoubleTapToZoomEnabled(false);
    setBackgroundColor(Color.TRANSPARENT);
    getAxisRight().setEnabled(false);
    getDescription().setEnabled(false);

    final YAxis yAxis = getAxisLeft();
    yAxis.setLabelCount(4,true);
    yAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
    yAxis.setValueFormatter(new TemperatureValueFormatter());
    yAxis.setTextColor(Color.WHITE);
    yAxis.setGridColor(Color.argb(102,255,255,255));
    yAxis.setAxisLineColor(Color.TRANSPARENT);

    final XAxis xAxis = getXAxis();
    xAxis.setDrawLimitLinesBehindData(true);
    xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
    xAxis.setTextColor(Color.WHITE);
    xAxis.disableGridDashedLine();
    xAxis.setDrawGridLines(false);
    xAxis.setGridColor(Color.argb(204,255,255,255));
    xAxis.setAxisLineColor(Color.TRANSPARENT);
    xAxis.setValueFormatter(new TimestampValueFormatter());
    xAxis.setLabelCount(4);
    xAxis.setAvoidFirstLastClipping(true);
    xAxis.setSpaceMin(10f);
invalidate();
fitScreen();
所发生的是,在yaxis和我的视图的左侧之间,以及在我的视图的右侧和右侧之间,仍然有一个边界。这一差距需要消失

我尝试过使用setExtraOffset,但不幸的是,它似乎将它限制在我看到的范围内,因为我尝试过设置负值,但没有运气

在任何父级或图表本身上都没有设置填充或边距。将Y轴标签位置更改为外侧时,它们看起来就像是在使用视图的边缘,并且与将它们放置在内侧时不受约束到相同的边距

我做错了什么

编辑截图

使用MPAndroidChart 3.0.1

通过从您在问题中给出的代码中删除这一行,我能够实现您想要的:

   xAxis.setSpaceMin(10f); //DON'T NEED THIS!!
并加入以下代码:

    mChart.setViewPortOffsets(0f, 0f, 0f, 0f);
    float xMax = mChart.getData().getDataSetByIndex(0).getXMax();
    float xMin = 0;
    xAxis.setAxisMaximum(xMax);
    xAxis.setAxisMinimum(xMin);
Before:注意左x轴线和第一个x值之间的边距为0-这是不需要的

注意:我们现在已经修复了它,因此没有边距,并且根据OP的要求,第一个x值与屏幕左侧齐平

如果您有任何其他UI需求,您在问题中没有提到它们,因此这个答案似乎解决了您的问题。您可能还需要考虑:

xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE); //changed to match your screenshot
完整的概念证明:

import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.content.ContextCompat;
import android.view.Menu;
import android.view.WindowManager;

import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.DefaultAxisValueFormatter;
import com.github.mikephil.charting.interfaces.datasets.ILineDataSet;
import com.github.mikephil.charting.utils.Utils;

import java.util.ArrayList;

public class LineChartActivity5 extends Activity {

    private LineChart mChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_linechart);

        mChart = (LineChart) findViewById(R.id.chart1);

        mChart.setDrawGridBackground(false);
        mChart.setDrawBorders(false);
        mChart.getLegend().setEnabled(false);
        mChart.setAutoScaleMinMaxEnabled(true);
        mChart.setTouchEnabled(true);
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setPinchZoom(true);
        mChart.setDoubleTapToZoomEnabled(false);
        mChart.setBackgroundColor(Color.parseColor("#FF8000"));
        mChart.getAxisRight().setEnabled(false);
        mChart.getDescription().setEnabled(false);

        final YAxis yAxis = mChart.getAxisLeft();
        yAxis.setLabelCount(4,true);
        yAxis.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART);
        yAxis.setValueFormatter(new DefaultAxisValueFormatter(2));
        yAxis.setTextColor(Color.WHITE);
        yAxis.setTextSize(15f); //not in your original but added
        yAxis.setGridColor(Color.argb(102,255,255,255));
        yAxis.setAxisLineColor(Color.TRANSPARENT);
        yAxis.setAxisMinimum(0); //not in your original but added

        final XAxis xAxis = mChart.getXAxis();
        xAxis.setDrawLimitLinesBehindData(true);
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM_INSIDE); //changed to match your spec
        xAxis.setTextColor(Color.WHITE);
        xAxis.disableGridDashedLine();
        xAxis.setDrawGridLines(false);
        xAxis.setGridColor(Color.argb(204,255,255,255));

        xAxis.setAxisLineColor(Color.TRANSPARENT);
        xAxis.setValueFormatter(new DefaultAxisValueFormatter(2)); //not in your original but added
        //xAxis.setValueFormatter(new TimestampValueFormatter());
        xAxis.setLabelCount(4);
        xAxis.setAvoidFirstLastClipping(true);
        //xAxis.setSpaceMin(10f); //DON'T NEED THIS!!

        setData(16, 15);

        mChart.setViewPortOffsets(0f, 0f, 0f, 0f);
        float xMax = mChart.getData().getDataSetByIndex(0).getXMax();
        float xMin = 0;
        xAxis.setAxisMaximum(xMax);
        xAxis.setAxisMinimum(xMin);
    }

    private void setData(int count, float range) {

        ArrayList<Entry> values = new ArrayList<Entry>();

        for (int i = 0; i < count; i++) {

            float val = (float) (Math.random() * range) + 3;
            values.add(new Entry(i, val));
        }

        LineDataSet set1;

        if (mChart.getData() != null &&
                mChart.getData().getDataSetCount() > 0) {
            set1 = (LineDataSet)mChart.getData().getDataSetByIndex(0);
            set1.setValues(values);
            mChart.getData().notifyDataChanged();
            mChart.notifyDataSetChanged();
        } else {
            set1 = new LineDataSet(values, "DataSet 1");
            set1.setColor(Color.WHITE);
            set1.setCircleColor(Color.BLACK);
            set1.setLineWidth(3f);
            set1.setDrawCircles(false);
            set1.setMode(LineDataSet.Mode.CUBIC_BEZIER);

            set1.setValueTextSize(9f);
            set1.setDrawValues(false);
            set1.setDrawFilled(true);
            set1.setFormLineWidth(1f);
            set1.setFormSize(15.f);

            if (Utils.getSDKInt() >= 18) {
                // fill drawable only supported on api level 18 and above
                Drawable drawable = ContextCompat.getDrawable(this, R.drawable.fade_orange);
                set1.setFillDrawable(drawable);
            }
            else {
                set1.setFillColor(Color.BLACK);
            }

            ArrayList<ILineDataSet> dataSets = new ArrayList<ILineDataSet>();
            dataSets.add(set1); // add the datasets

            // create a data object with the datasets
            LineData data = new LineData(dataSets);

            // set data
            mChart.setData(data);
        }
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.line, menu);
        return true;
    }
}

使用-chart.setViewPortOffsets0f、0f、0f、0f;xAxis.setEnabledtrue;yAxis.setEnabledtrue;。在Oncreate方法中执行所有这些命令。如果它不起作用,则显示您的XML布局谢谢您的详细回答。您的解释很有帮助,主要修复方法是设置视口偏移。在一些混乱之后,调用此方法时它也很重要。它适用于API>=24,但由于某些原因,SetViewPortOffset不适用于API