有时行不显示了graph-一个chartengine [英] sometimes line doesn't shows on the graph- a chartengine
问题描述
我已经开发使用的图表引擎的应用程序。而现在用achartengine绘制图表。
我已提请使用时间图的图表。在此日期即将来临x轴和价值观上的Y轴。当输入日期太长即,如果一个日期是1月至10和第2日期是4月12日,然后两个点之间的线不表示。
![请在此输入的形象描述] [上有日期另一点1月10日在那里,当我们滚动,我们可以看到,但点之间的线没有显示]的 1
这是code
公开查看getChartView(长的startDate,长的currentdate,INT可见性)
{
字符串标题=新票;
日期[] = dateList新日期[dates.length]
的for(int i = 0; I< dates.length;我++)
{
dateList [I] = convertDateFromString(日期[I]);
}
INT [] =颜色INT新[] {} Color.GREEN;
PointStyle [] =款式新PointStyle [] {} PointStyle.CIRCLE;
XYMultipleSeriesRenderer渲染= buildRenderer(颜色,款式);
setChartSettings(渲染,项目工作状态,日期,门票的startDate,
的currentdate,YMIN,YMAX,Color.GRAY,Color.LTGRAY);
浮TEXTSIZE = context.getResources()getDimension(R.dimen.text_title_medium)。
CustomTimeChart chart2 =新CustomTimeChart(
buildDateDataset(标题,dateList,价值观),渲染,背景,知名度,TEXTSIZE);
//时间图图=新的时间图(buildDateDataset(标题,dateList,价值观),渲染器);
chart2.setDateFormat(DD,MMM);
最后GraphicalView graphView =新GraphicalView(背景下,chart2);
graphView.setOnClickListener(新OnClickListener(){
@覆盖
公共无效的onClick(视图v){
SimpleDateFormat的格式化=新的SimpleDateFormat(YYYY-MM-DD);
SeriesSelection SS = graphView.getCurrentSeriesAndPoint();
如果(SS!= NULL)
{
长clickedDateSeconds =(长)ss.getXValue();
日期clickedDate =新的日期(clickedDateSeconds);
WeightTrackingActivity.dateCal.setTime(clickedDate);
WeightTrackingActivity.weight = ss.getValue();
尝试{
clickedDate = formatter.parse(clickedDate.toString());
}赶上(ParseException的E){
// TODO自动生成catch块
e.printStackTrace();
}
如果(clickedDate.before(Funcs.getCurrentDateInDate()))
WeightTrackingActivity.btnRecordWeight.setText(更新权重);
其他
WeightTrackingActivity.btnRecordWeight.setText(WeightTrackingActivity.weightBtnText);
}
其他
{
WeightTrackingActivity.btnRecordWeight.setText(WeightTrackingActivity.weightBtnText);
WeightTrackingActivity.dateCal.setTime(新的Date());
}
}
});
返回graphView;
}
保护无效setChartSettings(XYMultipleSeriesRenderer渲染,字符串title,字符串xTitle,
串yTitle,双层的startDate,双层的currentdate,双YMIN,双YMAX,INT axesColor,
INT labelsColor){
// renderer.setAxesColor(axesColor);
renderer.setApplyBackgroundColor(真);
renderer.setBackgroundColor(Color.WHITE);
renderer.setShowGrid(真);
renderer.setGridColor(Color.LTGRAY);
renderer.setShowLegend(假);
renderer.setMarginsColor(Color.WHITE);
// renderer.setPanEnabled(真实,真实);
renderer.setClickEnabled(真);
// renderer.setPanLimits(新双[] {YMIN,YMAX});
renderer.setZoomEnabled(真,假);
renderer.setLabelsTextSize(context.getResources()getDimension(R.dimen.text_title_medium));
renderer.setPointSize(1006米); renderer.setXAxisMin(的startDate);
renderer.setXAxisMax(的currentdate);
renderer.setXLabelsColor(Color.BLACK);
renderer.setXLabels(5);
(2)renderer.setXLabelsPadding;
renderer.setYAxisMin(YMIN);
renderer.setYAxisMax(YMAX);
renderer.setYLabels(6);
renderer.setYLabelsColor(0,Color.WHITE);
renderer.setYLabelsAlign(Align.RIGHT);
(2)renderer.setYLabelsPadding;
} 保护XYMultipleSeriesDataset buildDateDataset(字符串标题,日期[] xValues,
双[] yValues){
XYMultipleSeriesDataset数据=新XYMultipleSeriesDataset();
TimeSeries的系列=新的TimeSeries(职称);
sortingValues(xValues,yValues);
对于(INT K = 0; K< xValues.length; k ++){
series.add(xValues [K],yValues [K]);
}
dataset.addSeries(系列);
返回的数据集;
} 私人无效sortingValues(日期[] xValues,双[] yValues){
的for(int i = 0; I< xValues.length;我++)
{
对于(INT J = 0; J< xValues.length-1; J ++)
{
如果(xValues [I]。之前(xValues [J]))
{
日期D = xValues [I]
xValues [I] = xValues [J]。
xValues [J] = d的;
双X = yValues [I]
yValues [I] = yValues [J]。
yValues [J] = X;
}
}
}
} 保护XYMultipleSeriesRenderer buildRenderer(INT []的色彩,PointStyle []样式){
XYMultipleSeriesRenderer渲染器=新XYMultipleSeriesRenderer();
setRenderer(渲染,颜色,款式);
返回渲染器;
} 保护无效setRenderer(XYMultipleSeriesRenderer渲染器,INT []的色彩,PointStyle []样式){ renderer.setMargins(新INT [] {20,40,15,20});
INT长度= colors.length;
的for(int i = 0; I<长度;我++){
XYSeriesRenderer R =新XYSeriesRenderer();
r.setColor(颜色[I]);
r.setPointStyle(样式[I]);
r.setFillPoints(真);
r.setLineWidth(3);
r.setDisplayChartValues(真);
r.setChartValuesTextSize(context.getResources()getDimension(R.dimen.text_title_small));
r.setDisplayChartValuesDistance(2);
FillOutsideLine fillOutsideLine =新FillOutsideLine(FillOutsideLine.Type.BELOW);
fillOutsideLine.setColor(Color.parseColor(#A3E0FF));
r.addFillOutsideLine(fillOutsideLine);
renderer.addSeriesRenderer(R);
}
} 私人日期convertDateFromString(字符串日期){
日期dateConverted =新的日期();
SimpleDateFormat的DF =新的SimpleDateFormat(YYYY-MM-DD);
尝试{
dateConverted = df.parse(日期);
}赶上(ParseException的E){ }
返回dateConverted;
}
您可以关闭硬件加速关闭
的android:hardwareAccelerated =假
要禁用特定视图(这为我工作)
尝试:
View.setLayerType(View.LAYER_TYPE_SOFTWARE,NULL);
我的渲染图,但它应该工作无处不在之后添加这一点。
I have developed a application using a chart engine. and am using achartengine for drawing graphs. I have drawn a graph using time chart. here dates are coming on x-axis and values on y axis. When the input dates are too long ie, if one date is jan-10 and 2nd date is apr 12 then the line between two points doesn't showing. ![enter image description here][there is another point on date jan 10 is there when we scroll we can see that but the line between point is not showing]1
this is code
public View getChartView(long startDate,long currentDate,int visibility)
{
String titles = "New tickets";
Date[]dateList = new Date[dates.length];
for(int i=0;i<dates.length;i++)
{
dateList[i]=convertDateFromString(dates[i]);
}
int[] colors = new int[] { Color.GREEN};
PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE};
XYMultipleSeriesRenderer renderer = buildRenderer(colors, styles);
setChartSettings(renderer, "Project work status", "Date", "Tickets",startDate,
currentDate,yMin,yMax, Color.GRAY, Color.LTGRAY);
float textSize=context.getResources().getDimension(R.dimen.text_title_medium);
CustomTimeChart chart2 = new CustomTimeChart(
buildDateDataset(titles, dateList, values), renderer,context,visibility,textSize);
// TimeChart chart = new TimeChart(buildDateDataset(titles, dateList, values), renderer);
chart2.setDateFormat("dd,MMM");
final GraphicalView graphView = new GraphicalView(context, chart2);
graphView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
SeriesSelection ss = graphView.getCurrentSeriesAndPoint();
if(ss!=null)
{
long clickedDateSeconds = (long) ss.getXValue();
Date clickedDate = new Date(clickedDateSeconds);
WeightTrackingActivity.dateCal.setTime(clickedDate);
WeightTrackingActivity.weight = ss.getValue();
try {
clickedDate=formatter.parse(clickedDate.toString());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(clickedDate.before(Funcs.getCurrentDateInDate()))
WeightTrackingActivity.btnRecordWeight.setText("Update weight");
else
WeightTrackingActivity.btnRecordWeight.setText(WeightTrackingActivity.weightBtnText);
}
else
{
WeightTrackingActivity.btnRecordWeight.setText(WeightTrackingActivity.weightBtnText);
WeightTrackingActivity.dateCal.setTime(new Date());
}
}
});
return graphView;
}
protected void setChartSettings(XYMultipleSeriesRenderer renderer, String title, String xTitle,
String yTitle, double startDate, double currentDate, double yMin, double yMax, int axesColor,
int labelsColor) {
// renderer.setAxesColor(axesColor);
renderer.setApplyBackgroundColor(true);
renderer.setBackgroundColor(Color.WHITE);
renderer.setShowGrid(true);
renderer.setGridColor(Color.LTGRAY);
renderer.setShowLegend(false);
renderer.setMarginsColor(Color.WHITE);
// renderer.setPanEnabled(true, true);
renderer.setClickEnabled(true);
// renderer.setPanLimits(new double[]{yMin,yMax});
renderer.setZoomEnabled(true, false);
renderer.setLabelsTextSize(context.getResources().getDimension(R.dimen.text_title_medium));
renderer.setPointSize(5f);
renderer.setXAxisMin(startDate);
renderer.setXAxisMax(currentDate);
renderer.setXLabelsColor(Color.BLACK);
renderer.setXLabels(5);
renderer.setXLabelsPadding(2);
renderer.setYAxisMin(yMin);
renderer.setYAxisMax(yMax);
renderer.setYLabels(6);
renderer.setYLabelsColor(0, Color.WHITE);
renderer.setYLabelsAlign(Align.RIGHT);
renderer.setYLabelsPadding(2);
}
protected XYMultipleSeriesDataset buildDateDataset(String titles,Date[] xValues,
double[] yValues) {
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
TimeSeries series = new TimeSeries(titles);
sortingValues(xValues,yValues);
for (int k = 0; k < xValues.length; k++) {
series.add(xValues[k], yValues[k]);
}
dataset.addSeries(series);
return dataset;
}
private void sortingValues(Date[] xValues, double[] yValues) {
for(int i=0;i<xValues.length;i++)
{
for(int j=0;j<xValues.length-1;j++)
{
if(xValues[i].before(xValues[j]))
{
Date d = xValues[i];
xValues[i]=xValues[j];
xValues[j]=d;
Double x=yValues[i];
yValues[i]=yValues[j];
yValues[j]=x;
}
}
}
}
protected XYMultipleSeriesRenderer buildRenderer(int[] colors, PointStyle[] styles) {
XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
setRenderer(renderer, colors, styles);
return renderer;
}
protected void setRenderer(XYMultipleSeriesRenderer renderer, int[] colors, PointStyle[] styles) {
renderer.setMargins(new int[] { 20, 40, 15, 20 });
int length = colors.length;
for (int i = 0; i < length; i++) {
XYSeriesRenderer r = new XYSeriesRenderer();
r.setColor(colors[i]);
r.setPointStyle(styles[i]);
r.setFillPoints(true);
r.setLineWidth(3);
r.setDisplayChartValues(true);
r.setChartValuesTextSize(context.getResources().getDimension(R.dimen.text_title_small));
r.setDisplayChartValuesDistance(2);
FillOutsideLine fillOutsideLine=new FillOutsideLine(FillOutsideLine.Type.BELOW);
fillOutsideLine.setColor(Color.parseColor("#A3E0FF"));
r.addFillOutsideLine(fillOutsideLine);
renderer.addSeriesRenderer(r);
}
}
private Date convertDateFromString(String date) {
Date dateConverted = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
dateConverted = df.parse(date);
} catch ( ParseException e ) {
}
return dateConverted;
}
you can turn hardware acceleration off
android:hardwareAccelerated="false"
to disable it for a particular view (This worked for me)
try:
View.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
I've added this after rendering the graph but it should work everywhere.
这篇关于有时行不显示了graph-一个chartengine的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!