Java 在android中绘制图形?

Java 在android中绘制图形?,java,android,Java,Android,我想画一张和下图一样的图。谁能建议我怎么画这张图吗。我已经使用开放图表时间图形库,但我不能绘制这种类型的图形。 比如:http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android/1856369 大宗报价 我的代码:- 公共类示例扩展了活动{ private GraphicalView mChart; RelativeLayout chartContainer; ModalDate modald

我想画一张和下图一样的图。谁能建议我怎么画这张图吗。我已经使用开放图表时间图形库,但我不能绘制这种类型的图形。 比如:http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android/1856369

大宗报价

我的代码:-

公共类示例扩展了活动{

private GraphicalView mChart;

RelativeLayout chartContainer;
ModalDate modaldate;
private String strDate, strWeight, strHight;
Calendar calendar;
Date date2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    openChart();

}

private void openChart() {
    SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy");
    Date date;
    int doubleWeight, doubleHeight;

    // Creating TimeSeries for Visits
    TimeSeries visitsSeries = new TimeSeries("Visits");

    // Creating TimeSeries for Views
    TimeSeries viewsSeries = new TimeSeries("Views");
    /*
     * for (int i = 0; i < DateList.getInstance().size(); i++) { ModalDate
     * modaldate = new ModalDate(); ModalEntries entries = new
     * ModalEntries(); strDate = modaldate.getDate().toString(); strHeight =
     * modaldate.getModalentries().get(i).getHeight(); strWeight =
     * modaldate.getModalentries().get(i).getHeight();
     */

    for (int i = 0; i < DateList.getInstance().size(); i++) {

        strDate = DateList.getInstance().get(i).getDate();
        strWeight = DateList.getInstance().get(i).getModalentries().get(i)
                .getHeight();
        strHight = DateList.getInstance().get(i).getModalentries().get(i)
                .getWeight();
        try {
            date = formatter.parse(strDate);
            calendar = new GregorianCalendar();
            date2 = calendar.getTime();
            doubleHeight = Integer.parseInt(strHight);
            doubleWeight = Integer.parseInt(strWeight);
            visitsSeries.add(date2, doubleHeight);
            viewsSeries.add(date2, doubleWeight);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    // Creating a dataset to hold each series
    XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

    // Adding Visits Series to the dataset
    dataset.addSeries(visitsSeries);

    // Adding Visits Series to dataset
    dataset.addSeries(viewsSeries);

    // Creating XYSeriesRenderer to customize visitsSeries
    XYSeriesRenderer visitsRenderer = new XYSeriesRenderer();
    visitsRenderer.setColor(Color.BLUE);
    visitsRenderer.setPointStyle(PointStyle.CIRCLE);
    visitsRenderer.setFillPoints(true);
    visitsRenderer.setLineWidth(5);
    visitsRenderer.setDisplayChartValues(true);

    // Creating XYSeriesRenderer to customize viewsSeries
    XYSeriesRenderer viewsRenderer = new XYSeriesRenderer();
    viewsRenderer.setColor(Color.YELLOW);
    viewsRenderer.setPointStyle(PointStyle.CIRCLE);
    viewsRenderer.setFillPoints(true);
    viewsRenderer.setLineWidth(5);
    viewsRenderer.setDisplayChartValues(true);

    // Creating a XYMultipleSeriesRenderer to customize the whole chart
    XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();

    multiRenderer.setChartTitle("Child Graph");
    multiRenderer.setXTitle("Date");
    multiRenderer.setYTitle("Value");
    // should be same
    multiRenderer.addSeriesRenderer(visitsRenderer);
    multiRenderer.addSeriesRenderer(viewsRenderer);
    // Creating a Time Chart
    mChart = (GraphicalView) ChartFactory.getTimeChartView(
            getBaseContext(), dataset, multiRenderer, "dd-MMM-yyyy");

    multiRenderer.setClickEnabled(true);
    multiRenderer.setSelectableBuffer(10);

    // Setting a click event listener for the graph
    chartContainer = (RelativeLayout) findViewById(R.id.chart_container);
    chartContainer.removeAllViews();
    RelativeLayout.LayoutParams lay = new RelativeLayout.LayoutParams(
            RelativeLayout.LayoutParams.FILL_PARENT,
            RelativeLayout.LayoutParams.FILL_PARENT);

    lay.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
    chartContainer.addView(mChart, lay);

    // chartContainer.addView(mChart);
}

@Override
protected void onResume() {
    // TODO Auto-generated method stub
    super.onResume();
    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {

        finish();

    }

}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        openChart();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {

        finish();
    }
}
enter code here
@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    super.onBackPressed();
    finish();
}

}请尝试以下备选方案

这可能会对您有所帮助。我如何在时间openchart图形中绘制日期线。我如何绘制12月15日等日期线?阅读那里的文档并发挥创意,这不是我们程序员应该做的,所有问题都没有简单明了的解决方案谢谢您的支持,但我在图形中创建日期线时遇到了一些问题。如图所示,或者我应该使用画布绘制此图?我认为这在画布上是可能的,一旦你使用onmeasure确定X,Y的最大值,你就可以确定Y轴所需的比例,得到你的最大值,即85厘米减去65厘米,例如,在Y轴比例间隔的范围内,你可以算出比率,可以使用moveTO绘制xy线,这需要很多耐心和计划,因为你还需要绘制日期的垂直线。