Android 当我使用API 10时,为什么ACHartEngine LineGraph不向我显示任何图形

Android 当我使用API 10时,为什么ACHartEngine LineGraph不向我显示任何图形,android,achartengine,android-support-library,Android,Achartengine,Android Support Library,我正在尝试在我的Android应用程序中使用ACHartEngine。使用API 14启动应用程序时一切正常,但只要我使用API 14下面的线形图或条形图,它就不会显示任何图形。 也许有人也经历过同样的问题 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { setupView_1 = inflater.inflate

我正在尝试在我的Android应用程序中使用ACHartEngine。使用API 14启动应用程序时一切正常,但只要我使用API 14下面的线形图或条形图,它就不会显示任何图形。 也许有人也经历过同样的问题

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  savedInstanceState) {

    setupView_1 = inflater.inflate(R.layout.layout_setup1, container, false);

startPowerGraph();

    return setupView_1;
}

private void startPowerGraph() {

    setupChart();
    //Checking if i am connected via Bluetooth
    if (BT.isConnected()) {
        // Start plotting chart
        new ChartTask().execute();
    }
}

public void setupChart() {

    // Creating an XYSeries for Visits
    visitsSeries = new XYSeries("Charging Power");

    // Creating a dataset to hold each series
    dataset = new XYMultipleSeriesDataset();
    // Adding Visits Series to the dataset
    dataset.addSeries(visitsSeries);

    // Creating XYSeriesRenderer to customize visitsSeries
    visitsRenderer = new XYSeriesRenderer();
    visitsRenderer.setColor(Color.BLUE);
    visitsRenderer.setPointStyle(PointStyle.CIRCLE);
    visitsRenderer.setFillPoints(true);
    visitsRenderer.setLineWidth(2);
    visitsRenderer.setDisplayChartValues(false);
    // visitsRenderer.setFillBelowLine(true);// needed for area chart??

    // Creating a XYMultipleSeriesRenderer to customize the whole chart
    multiRenderer = new XYMultipleSeriesRenderer();
    multiRenderer.setInScroll(true);// to fit in ScrollVIew

    multiRenderer.setChartTitle(setupView_1.getResources().getString(R.string.chartTitle));
    multiRenderer.setXTitle(setupView_1.getResources().getString(R.string.chartXAchse));
    multiRenderer.setYTitle(setupView_1.getResources().getString(R.string.chartYAchse));
    multiRenderer.setZoomButtonsVisible(false);

    multiRenderer.setMargins(new int[] { 20, 30, 15, 0 });
    // multiRenderer.setXAxisMin(0);
    // multiRenderer.setXAxisMax(100);
    //
    // multiRenderer.setYAxisMin(0);
    // multiRenderer.setYAxisMax(10);

    multiRenderer.setBarSpacing(2);

    // Adding visitsRenderer to multipleRenderer
    // Note: The order of adding dataseries to dataset and renderers to
    // multipleRenderer
    // should be same
    multiRenderer.addSeriesRenderer(visitsRenderer);

    // Getting a reference to LinearLayout of the SetUpCharging_Page1 Layout
    LinearLayout chartContainer = (LinearLayout) setupView_1.findViewById(R.id.Power_LinearLayout_Graph);

    mChart = (GraphicalView) ChartFactory.getLineChartView(mFragmentActivity, dataset, multiRenderer);
    // mChart = (GraphicalView) ChartFactory.getBarChartView(
    // mFragmentActivity, dataset, multiRenderer, Type.STACKED);
    // Adding the Line Chart to the LinearLayout

    chartContainer.addView(mChart);

}

public class ChartTask extends AsyncTask<Void, String, Void> {

    // Generates dummy data in a non-ui thread
    @Override
    protected Void doInBackground(Void... params) {
        int i = 0;
        int pulse = 100;
        try {
            do {
                String[] values = new String[2];

                // get Actual chargepower
                int visits = getPowerKW();
                if (getPowerKW() > multiRenderer.getYAxisMax()) {
                    multiRenderer.setYAxisMax(getPowerKW() + 2);

                }
                if (getPowerKW() < multiRenderer.getYAxisMax()) {
                    multiRenderer.setYAxisMin(getPowerKW());
                }

                values[0] = Integer.toString(i);
                values[1] = Integer.toString(visits);

                double maxX = visitsSeries.getMaxX();
                double minX = maxX - i; // deltaX is your required
                                        // x-range
                double maxY = visitsSeries.getMinY();
                double minY = visitsSeries.getMaxY();

                multiRenderer.setRange(new double[] { -minX, maxX, -maxY, minY });

                if (BT.isConnected()) {
                    publishProgress(values);
                    Thread.sleep(pulse);
                    i++;
                } else {
                    Toast.makeText(mFragmentActivity, "Chart is waiting for Bluetooth Connection", Toast.LENGTH_SHORT).show();
                }

            } while (pause);
        } catch (Exception e) {
        }
        return null;
    }

    // Plotting generated data in the graph
    @Override
    protected void onProgressUpdate(String... values) {
        visitsSeries.add(Integer.parseInt(values[0]), Integer.parseInt(values[1]));
        mChart.repaint();
    }
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
setupView_1=充气机。充气(R.layout.layout_setup1,容器,错误);
startPowerGraph();
返回设置视图_1;
}
私有void startPowerGraph(){
setupChart();
//检查我是否通过蓝牙连接
如果(BT.isConnected()){
//开始绘制图表
新建ChartTask().execute();
}
}
公共图表(){
//为访问创建XYSeries
visitsSeries=新的XYSeries(“充电电源”);
//创建数据集以保存每个系列
数据集=新的XYMultipleSeriesDataset();
//将访问序列添加到数据集
dataset.addSeries(visitsSeries);
//创建XYSeriesRenderer以自定义visitsSeries
visitsRenderer=新的XYSeriesRenderer();
visitsRenderer.setColor(Color.BLUE);
visitsRenderer.setPointStyle(PointStyle.CIRCLE);
visitsRenderer.setFillPoints(真);
visitsRenderer.setLineWidth(2);
visitsRenderer.setDisplayChartValues(false);
//visitsRenderer.setFillblowline(true);//面积图需要??
//创建XYMultipleReseriesRenderer以自定义整个图表
multiRenderer=新的XYMultipleReseriesRenderer();
multiRenderer.setInScroll(true);//以适合滚动视图
setChartTitle(setupView_1.getResources().getString(R.string.chartTitle));
setupView_1.getResources().getString(R.string.chartXAchse));
setupView_1.getResources().getString(R.string.chartYAchse));
multiRenderer.setZoomButtonsVisible(false);
setMargins(新的int[]{20,30,15,0});
//多渲染器.setXAxisMin(0);
//setXAxisMax(100);
//
//多渲染器.setYAxisMin(0);
//多渲染器setYAxisMax(10);
多渲染器。设置间隔(2);
//将visitsRenderer添加到multipleRenderer
//注意:将数据系列添加到数据集和将渲染器添加到
//多路复用器
//应该是一样的
multiRenderer.addSeriesRenderer(visitsRenderer);
//获取对SetupU Page1布局的LinearLayout的引用
LinearLayout chartContainer=(LinearLayout)设置视图\u 1.findViewById(R.id.Power\u LinearLayout\u图形);
mChart=(GraphicalView)ChartFactory.getLineChartView(MFFragmentActivity、dataset、multiRenderer);
//mChart=(GraphicalView)ChartFactory.getBarChartView(
//MFFragmentActivity、数据集、多渲染器、类型.STACKED);
//将折线图添加到LinearLayout
chartContainer.addView(mChart);
}
公共类ChartTask扩展了AsyncTask{
//在非ui线程中生成虚拟数据
@凌驾
受保护的Void doInBackground(Void…参数){
int i=0;
int脉冲=100;
试一试{
做{
字符串[]值=新字符串[2];
//获取实际充电功率
int visions=getPowerKW();
if(getPowerKW()>multiRenderer.getYAxisMax()){
setYAxisMax(getPowerKW()+2);
}
if(getPowerKW()
好的,新的更新

它与滚动视图无关,滚动视图与图表不兼容。对于API>10,您可以编辑

android:fillViewport="true" 
在.xml文件中或在java代码中执行

DialRenderer dialRenderer;
dialRenderer.setInScroll(true);
但对于API 10,这在我的情况下不起作用。所以 我使用以下代码修复了它:

mChart.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 250));
请注意,我使用了250或任何其他fix int值。如果我使用

mChart.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));
它不会再起作用了


也许有人能给我解释一下这个奇怪的问题:好的,问题解决了!问题是,在我的例子中,在API<14中,线条图在ScrollView中不起作用。它就是不会出现。对于API 14,它对我很有用