Java 在android中绘制图形?
我想画一张和下图一样的图。谁能建议我怎么画这张图吗。我已经使用开放图表时间图形库,但我不能绘制这种类型的图形。 比如:http://stackoverflow.com/questions/424752/any-good-graphing-packages-for-android/1856369 大宗报价 我的代码:- 公共类示例扩展了活动{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
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线,这需要很多耐心和计划,因为你还需要绘制日期的垂直线。