Android Achartengine:无法保存由于滚动而遗漏的完整条形图

Android Achartengine:无法保存由于滚动而遗漏的完整条形图,android,achartengine,Android,Achartengine,我使用achartengine图表库创建了一个条形图,并试图将此条形图保存为.jpg图像。条形图已成功显示在文本视图上,但当我保存此条形图时,仅保存第一次显示文本视图时可见的条形图部分。我想将整个视图保存为图像,包括由于滚动而遗漏的部分 代码: 公共类MainActivity扩展活动{ 字符串[]firstData1={“IDLE”、“IDLE”、“DCH”、“DCH”、“FACH”}; int[]firstData=newint[firstData1.length]; 字符串[]m={“空闲”

我使用achartengine图表库创建了一个条形图,并试图将此条形图保存为.jpg图像。条形图已成功显示在文本视图上,但当我保存此条形图时,仅保存第一次显示文本视图时可见的条形图部分。我想将整个视图保存为图像,包括由于滚动而遗漏的部分

代码:

公共类MainActivity扩展活动{
字符串[]firstData1={“IDLE”、“IDLE”、“DCH”、“DCH”、“FACH”};
int[]firstData=newint[firstData1.length];
字符串[]m={“空闲”、“FACH”、“DCH”};
公共图形视图createIntent()
{
int[]x={0,1,2,3,4};
双[]时间={1361292289.2384271361292289.2408381361292289.4302601361292289.5968861361292290.002587};
字符串time1[]=新字符串[time.length];

对于(int i=0;我是否尝试过在GraphicalView中使用toBitmap()方法?我曾经这样使用过toBitmap():位图bm=gv.toBitmap();其中gv是图形视图。我得到了Nullpointer异常。我注释掉了以下几行:rl.measure(MeasureSpec.getSize(get),heightMeasureSpec)rl.layout(0,0,rl.getMeasuredWidth(),rl.getMeasuredHeight());Bitmap bm=Bitmap.createBitmap(rl.getWidth(),rl.getHeight(),Bitmap.Config.ARGB_8888);我也尝试过:gv.measure(measurept.makeMeasureSpec(0,MeasureSpec.unspect),MeasureSpec.makeMeasureSpec(0,MeasureSpec.unspect));gv.layout(0,0,rl.getMeasuredWidth(),rl.getMeasuredHeight());但我得到的错误高度和宽度应大于0
public class MainActivity extends Activity {
String[] firstData1={"IDLE","IDLE","DCH","DCH","FACH"};
int[] firstData=new int[firstData1.length];
String[] m={"IDLE","FACH","DCH"};


public GraphicalView createIntent()
{
    int[] x={0,1,2,3,4};
    double[] time={1361292289.238427,1361292289.240838,1361292289.430260,1361292289.596886,1361292290.002587};
    String time1[]=new String[time.length];
    for(int i=0;i<firstData1.length;i++)
    {
        if(firstData1[i]=="IDLE")
        firstData1[i]="0";
        else if(firstData1[i]=="FACH")
            firstData1[i]="1";
            else
                firstData1[i]="2";

    }
    firstData=new int[firstData1.length];
    for(int i=0;i<firstData1.length;i++)
    {
        firstData[i]=Integer.parseInt(firstData1[i]);
    }

    XYSeries stateSeries = new XYSeries("Device State");
    for(int i=0;i<x.length;i++){
        stateSeries.add(i,firstData[i]);

    }
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
    dataset.addSeries(stateSeries);
    XYSeriesRenderer stateRenderer = new XYSeriesRenderer();
    stateRenderer.setColor(Color.rgb(0, 250, 154));
    stateRenderer.setDisplayChartValues(true);

    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
    multiRenderer.setAxisTitleTextSize(16);
    multiRenderer.setChartTitleTextSize(20);
    multiRenderer.setLabelsTextSize(10);
    multiRenderer.setLegendTextSize(10);
    multiRenderer.setBarSpacing(0.5);
    multiRenderer.setXLabelsAlign(Align.LEFT);
    multiRenderer.setLabelsColor(Color.BLACK);
    multiRenderer.setOrientation(Orientation.HORIZONTAL);
    multiRenderer.setYLabels(0); 
    multiRenderer.setMarginsColor(Color.parseColor("#EEEDED"));
    multiRenderer.setXLabelsColor(Color.BLACK);
    multiRenderer.setYLabelsColor(0,Color.BLACK);
    multiRenderer.setMargins(new int[] { 50, 45, 40, 40 }); 
    multiRenderer.setApplyBackgroundColor(true);
    multiRenderer.setBackgroundColor(Color.parseColor("#FBFBFC"));
    multiRenderer.setXLabels(0);
    multiRenderer.setChartTitle("Device State Chart");
    multiRenderer.setXTitle("Timestamp");
    multiRenderer.setYTitle("Device State");
    multiRenderer.setZoomButtonsVisible(true);
    for(int i=0; i<3;i++){
        multiRenderer.addYTextLabel(i, m[i]);
    }
    for(int i=0;i<time.length;i++)
    {
        DecimalFormat myFormatter = new DecimalFormat("0.000000");
        time1[i] = myFormatter.format(time[i]);
    }
    for(int i=0; i< x.length;i++){
        multiRenderer.addXTextLabel(i, time1[i]);
    }
    multiRenderer.addSeriesRenderer(stateRenderer);
    final GraphicalView grfv  = ChartFactory.getBarChartView(getBaseContext(), dataset, multiRenderer, BarChart.Type.DEFAULT);
    return grfv;

}



@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    final GraphicalView gv=createIntent();
    RelativeLayout rl=(RelativeLayout)findViewById(R.id.graph);
    rl.addView(gv);
    rl.measure(MeasureSpec.makeMeasureSpec(800, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(800, MeasureSpec.EXACTLY));
    rl.layout(0, 0, rl.getMeasuredWidth(), rl.getMeasuredHeight()); 
    Bitmap bm=Bitmap.createBitmap(rl.getWidth(), rl.getHeight(),Bitmap.Config.ARGB_8888);
    Canvas cn=new Canvas(bm);
    rl.draw(cn);
    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/_images");
    myDir.mkdirs();
    Random generator = new Random();
    int n = 10000;
    n = generator.nextInt(n);
    String fname = "Image-" + n + ".jpg";
    File file = new File(myDir, fname);
    if (file.exists())
        file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.JPEG, 30, out);
        out.flush();
        out.close();

    } catch (Exception e) {
        e.printStackTrace();
    }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}
}