有时行不显示了graph-一个chartengine [英] sometimes line doesn't shows on the graph- a chartengine

查看:300
本文介绍了有时行不显示了graph-一个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.setChartValues​​TextSize(context.getResources()getDimension(R.dimen.text_title_small));
              r.setDisplayChartValues​​Distance(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆