sometimes line doesn't shows on the graph- a chartengine

时光怂恿深爱的人放手 提交于 2020-01-06 14:42:26

问题


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;
            }

回答1:


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.



来源:https://stackoverflow.com/questions/23244346/sometimes-line-doesnt-shows-on-the-graph-a-chartengine

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!