GVKun编程网logo

我的Android AChartEngine已经可以使用,但如何让它看起来不错?(android acodec)

8

在本文中,我们将带你了解我的AndroidAChartEngine已经可以使用,但如何让它看起来不错?在这篇文章中,我们将为您详细介绍我的AndroidAChartEngine已经可以使用,但如何让它

在本文中,我们将带你了解我的Android AChartEngine已经可以使用,但如何让它看起来不错?在这篇文章中,我们将为您详细介绍我的Android AChartEngine已经可以使用,但如何让它看起来不错?的方方面面,并解答android acodec常见的疑惑,同时我们还将给您一些技巧,以帮助您实现更有效的AChartEngine和Android Studio、AChartEngine实现Android实时时间变化曲线、AchartEngine折线图Xaxis Android、Android AChartEngine – 无法更改Y轴标签的textColor

本文目录一览:

我的Android AChartEngine已经可以使用,但如何让它看起来不错?(android acodec)

我的Android AChartEngine已经可以使用,但如何让它看起来不错?(android acodec)

我想这个标题会泄露我的大多数问题,但让我们详细介绍一下背景:

我有一个主要针对平板电脑的Android应用,它将在TimeCharts中显示一些不同的实时数据.所以我已经有了一个服务来与数据源进行通信,数据源抓取数据,解析它并将值添加到单例TimeSeries.当用户导入和导出片段时,片段只需添加正确的TimeSeries并继续调用mChartView.repaint();每500ms

所有这些都是可操作的,可以在标签,旋转,通知等方面很好地工作.

因为它是一款平板电脑应用,我想实现两件事:1)最大化观看区域; 2)让它看起来不错.

1)我已经删除了缩放按钮(出于某种原因,如果我尝试添加它们,它给我NullException)和mRenderer.setZoomButtonsVisible(false);但是仍有巨大的底部空间需要大量的屏幕空间.我尝试设置一个负边框,它可以工作,但标签不会随着这个边框移动而我最终会让X轴越过标签甚至传递它们.
如何使用边框向下移动标签,或者将它们放在图形的顶部?

2)
a)该应用程序是用户可配置为使用Holo_Dark或Holo_light.所以我在渲染器上使用透明背景(请参阅下面的代码段)来显示holo所做的漂亮背景阴影.如何更改轴文本颜色?我找到了mRenderer.setAxesColor(颜色),但它只更改了行,而不是文本.

int color = Color.argb(0,255,255); // Transparent colour
    mRenderer.setBackgroundColor(color);
    mRenderer.setMarginsColor(color);

b)Y轴在其标签的顶部交叉,我如何将它们向左偏移一点,以便文本可读? (它不是用setMargins())

c)当用户在图表周围进行缩放和平移时,图表会停止更新/重新缩放屏幕上的最新值,并且用户必须保持平移以查看最新值.我在ActionBar上添加了一个“重置缩放”按钮,但我无法使其工作.什么是使值再次更新的代码.

d)如果我的TimeSeires的范围是10分钟(每秒2个值),我怎么能让它只显示最后1分钟(例如),如果用户想要以前的值,他可以反击? (以及c上的使用按钮)重新开始)

目前我的渲染设置为:

int color = Color.argb(0,255); // Transparent colour
    mRenderer.setBackgroundColor(color);
    mRenderer.setMarginsColor(color);
    mRenderer.setAxisTitleTextSize(16); // 16
    mRenderer.setChartTitleTextSize(20); // 20
    mRenderer.setLabelsTextSize(15); // 15
    mRenderer.setLegendTextSize(15); // 15
    mRenderer.setPointSize(0); // 10
    mRenderer.setMargins(new int[] { 20,30,15,0 });      
    mRenderer.setZoomButtonsVisible(false);
    mRenderer.setShowAxes(true);
    mRenderer.setShowLegend(true);
    mRenderer.setShowGridX(true);
    mRenderer.setShowLabels(true);

每个渲染添加到Multiple渲染器的内容如下:

renderer.setdisplayChartValues(false);
    mRenderer.addSeriesRenderer(renderer);

非常感谢所有的帮助!

编辑只是为了包含我的最终代码供其他人查看:

我最终完全放弃了图例,并在图表上方浮动实现了我自己的图例,因此布局是一个带有ChartView和TableLayout的FrameLayout.

我实现了一个由几个类扩展的抽象CurvesFragment类.

我在片段OnCreateView中配置图表为:

mChartView = ChartFactory.getTimeChartView(getActivity().getApplicationContext(),mDataset,mRenderer,"HH:mm:ss"); // X axis in a time scale
    // Setup chart renderer =============================
    mRenderer.setLabelsTextSize(15); // Text size
    mRenderer.setMargins(new int[] { 0,Utils.convertToPx(5,getActivity().getApplicationContext()),0 }); // 5dp on the left to show that little line
    mRenderer.setZoomButtonsVisible(false); // bye bye zoom
    mRenderer.setShowAxes(true); // show both axes
    mRenderer.setShowLegend(false); // bye bye legend
    mRenderer.setShowGridX(true); // X grid helps identify values
    mRenderer.setShowLabels(true); // See the values
    mRenderer.setYLabelsAlign(Align.LEFT); // put the Y labels on the left of the axis
    if (Utils.getCurrentTheme(getActivity().getApplicationContext()) == android.R.style.Theme_Holo) {
        mRenderer.setXLabelsColor(getResources().getColor(android.R.color.primary_text_dark));
        mRenderer.setYLabelsColor(0,getResources().getColor(android.R.color.primary_text_dark));
        mRenderer.setMarginsColor(getResources().getColor(android.R.color.background_dark));
        legend.setBackgroundResource(R.drawable.border_dark);
    } else {
        // same as above but for Holo_light
    }
  // And from here proceed to add the TimeCharts with using
  renderer.setdisplayChartValues(false);

在我的操作栏上,我包含了Pause / Resume和ResetZoom的按钮.
重置缩放很简单:

mRenderer.setXAxisMax(-Double.MAX_VALUE);
        mRenderer.setXAxisMin(Double.MAX_VALUE);
        mRenderer.setYAxisMax(-Double.MAX_VALUE);
        mRenderer.setYAxisMin(Double.MAX_VALUE);
        mChartView.repaint();

有一个后台服务,它包含对TimeSeries的引用,它总是从WiFi读取新数据并将它们添加到系列中.这样,在片段中有一个runnable执行每700ms调用repaint()为:

// Chart rendering control ========================
private Runnable updateDataSet = new Runnable() {

    public void run() {
        if (!chartPaused) {

            double max = mRenderer.getXAxisMax(); // get renderer maximum value
            double min = mRenderer.getXAxisMin(); // get renderer minimum value

            // Check if the user scrolled/zoomed/panned the graph or if it's on 'auto'
            if (!((max == Double.MAX_VALUE || max == -Double.MAX_VALUE) && (min == Double.MAX_VALUE || min == -Double.MAX_VALUE))) {

                double newMax = mDataset.getSeriesAt(0).getMaxX(); // new max is the latest value from our series
                double newMin = newMax - Math.abs(max - min); // new min value is the X range the user zoomed into
                mRenderer.setXAxisMax(newMax); // set the new values
                mRenderer.setXAxisMin(newMin);
            }

            // Logic that updates the TableLayout with the legend is placed here

            mChartView.repaint();
        }

        getView().postDelayed(updateDataSet,700);
    }
};

并且有一个ZoomListener和一个PanListener,每次用户触摸它时都会暂停图表.这样用户可以缩放和平移,但每当它恢复图表更新时,它只会向前滚动到最早的数据而不改变缩放级别.

我猜最终的结果很稳固,在Holo_Light和Holo_Dark上看起来都不错.

感谢Dan为答案以及创建引擎的所有其他开发人员提供了很多帮助.

快乐的编码!

解决方法

问题1.您可以尝试使用这些API调用:
mRenderer.setShowLegend(false);

要么

mRenderer.setMargins(new int[] {top,left,bottom,right});

也许降低底值?

问题2.
一个)

mRenderer.setXLabelsColor();
mRenderer.setYLabelsColor();

b)

mRenderer.setXLabelsAlign();

C)

当系列获得新值时,我认为您可以执行以下操作:

mRenderer.setXAxisMin();
mRenderer.setXAxisMax();

提供x min和x max值作为要显示的范围并调用mChartView.repaint();之后.

d)与c)相同

作为一个建议,请尝试将这些长问题分成几个较小的问题,你可以更快地得到答案.没有多少ACE用户知道如何回答所有问题.即使是这个图书馆的作者也要考虑一些答案:)

AChartEngine和Android Studio

AChartEngine和Android Studio

我必须创建一个广泛使用图表的应用程序.
在网上阅读我选择的achartengine似乎拥有我需要的一切.

我下载了jar文件,我插入了libs文件夹,我选择了“添加到库”,我在gradlew中午餐.
在导入org.achartengine.xxxx的源中导致我总是返回无法解析符号的错误.

你有什么建议吗?
谢谢
安德里亚

解决方法

我可以在我的 Android Studio项目中使用此库,this topic解释了如何将AChartEngine repo添加到您的项目中.

我做了什么:

>在项目范围的build.gradle中添加了以下内容(项目根目录中的一个):

allprojects {
    repositories {
        ...
        maven {
            url "https://repository-achartengine.forge.cloudbees.com/snapshot/"
        }
    }
}

>对于使用该库的每个模块,将其添加到其build.gradle(如果它应包含在所有模块中,您可以将它放到顶级build.gradle中):

dependencies {
    ...
    compile group: 'org.achartengine',name: 'achartengine',version: '1.2.0'
}

现在我可以在项目中使用该库,我在代码中看到类帮助弹出窗口并构建运行成功.

AChartEngine实现Android实时时间变化曲线

AChartEngine实现Android实时时间变化曲线

话不多说先看效果图

参考https://blog.csdn.net/s_best1987/article/details/8946759#

 

 

AChartEngine给我们提供了GraphicalView这个类,可以灵活的在任何位置插入图表,非常的方便。

下面对相关类进行讲解:

GraphicalView:图表控件,是一个基本类,也是一个容器控件,所有的图表都在此控件中呈现;

ChartFactory:工厂类,通过此类来构建不同的图表对象,比如LineChart(折线图)、CubeLineChart(圆滑折线图)、PieChart(饼图)等;

XYMultipleSeriesDataset:数据集容器,在此类中存放多条曲线的数据集合

XYMultipleSeriesRenderer:渲染器容器,此类初始化坐标系,网格,标题等,还用来存放多条曲线的渲染器

XYSeries:数据集,存放曲线的数据

XYSeriesRenderer:渲染器,存放曲线的参数,比如线条颜色,描点大小等

好了 上代码:

LinearLayout layout = (LinearLayout)findViewById(R.id.chart);
        //生成图表
		chart = ChartFactory.getTimeChartView(this, getDateDemoDataset(), getDemoRenderer(), "MM/dd HH:mm");
		layout.addView(chart, new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT));
		
private XYMultipleSeriesDataset getDateDemoDataset() {
		    dataset1 = new XYMultipleSeriesDataset();
		    
		    long value = System.currentTimeMillis();
//			try {
//				value = format1.parse("2020-03-11 00:00:00").getTime();
//			} catch (ParseException e) {
//				// Todo Auto-generated catch block
//				e.printstacktrace();
//			}
			Date[] dd=new Date[nr];
			for (int i = 0; i < nr; i++) {
				dd[i]=new Date(value+1000*1800*i);
			}
		    Random r = new Random();
		    for (int i = 0; i < SERIES_NR; i++) {
		      series1 = new TimeSeries("Demo series ");
		      for (int k = 0; k < nr; k++) {
//		        series1.add(new Date(value+k*1000*24*3600), 20 +r.nextInt() % 10);
		    	series1.add(dd[k], 20 +r.nextInt() % 10);
			      
		      }
		      dataset1.addSeries(series1);
		    }
		    Log.i(TAG, dataset1.toString());
		    return dataset1;
		  }

 

 private XYMultipleSeriesRenderer getDemoRenderer() {
		    XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
//		    renderer.setChartTitle("实时曲线");//标题
//		    renderer.setChartTitleTextSize(20);
		    renderer.setAxisTitleTextSize(16);
		    renderer.setAxesColor(Color.BLACK);
		    renderer.setLabelsTextSize(15);    //数轴刻度字体大小
		    renderer.setLabelsColor(Color.BLACK);
		    renderer.setLegendTextSize(15);    //曲线说明
		    renderer.setXLabelsColor(Color.BLACK);
		    renderer.setYLabelsColor(0,Color.BLACK);
		    renderer.setShowCustomTextGrid(true); // 设置X轴和Y轴网格是否显示.
			
			renderer.setGridColor(Color.WHITE);// LTGRAY); //网格颜色,灰色
			renderer.setMarginsColor(Color.BLUE); // 设置四边颜色
			renderer.setBackgroundColor(Color.WHITE); //设置中间背景色
//			
		    renderer.setShowLegend(true);
		    renderer.setMargins(new int[] {20, 30, 30, 0});
		    XYSeriesRenderer r = new XYSeriesRenderer();
		    r.setColor(Color.RED);
		    r.setChartValuesTextSize(15);
		    r.setPointStyle(PointStyle.CIRCLE);
		    r.setFillBelowLine(true);
//		    r.setFillBelowLineColor(Color.WHITE);
		    r.setFillPoints(true);
		    renderer.addSeriesRenderer(r);
		    renderer.setPanEnabled(true, true);
		    renderer.setShowGrid(true);
		    renderer.setYAxisMax(50);
		    renderer.setYAxisMin(-20);
		    return renderer;
		  }
	   final int nr = 48;

 

时间曲线图的横坐标为时间轴,对齐要相应的处理。

 

文件上传在审核。后续修改源码地址。

AchartEngine折线图Xaxis Android

AchartEngine折线图Xaxis Android

我在 android上工作achartengine并完成所有的工作我在线图中遇到一个问题我提到了xaxis标签,但它的显示像2,4,6,8,10,12等等与我的xaxis标签覆盖,我想要在xaxis中隐藏2,12个标签.如果你不明白,请参见下图:

这是完整的代码:

public class ChartExample extends Activity {
    private GraphicalView mChartView;

    XYMultipleSeriesRenderer renderer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Todo Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_chart);

        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2);

        String[] titles = new String[] { "spens1","2second" };
        List<double[]> x = new ArrayList<double[]>();
        x.add(new double[] { 1,2,3,5,7,9,11,12 });
        x.add(new double[] { 1,12 });
        // }
        List<double[]> values = new ArrayList<double[]>();
        values.add(new double[] { 9,15,19,23,26,25,22,18,13,10 });
        values.add(new double[] { 11,21,40,12,24,20,12 });


        int[] colors = new int[] { Color.BLUE,Color.RED};
        PointStyle[] styles = new PointStyle[] { PointStyle.CIRCLE,PointStyle.CIRCLE};

        renderer = buildrenderer(colors,styles);

        int length = renderer.getSeriesRendererCount();
        for (int i = 0; i < length; i++) {
            ((XYSeriesRenderer) renderer.getSeriesRendererAt(i))
                    .setFillPoints(true);
        }

        setChartSettings(renderer,"score CARD VIEW","Attetempts","Marks scored",12.5,45,Color.LTGRAY,Color.LTGRAY);
        renderer.setXLabels(12);
        renderer.setYLabels(10);
        renderer.setShowGrid(false);
        renderer.setXLabelsAlign(Align.CENTER);
        renderer.setYLabelsAlign(Align.CENTER);

        //renderer.setZoomButtonsVisible(true);
        //renderer.setPanLimits(new double[] { 0,40 });
        //renderer.setZoomLimits(new double[] { 0,40 });
        renderer.setPanEnabled(false,false);
        renderer.setZoomEnabled(false,false);
        renderer.setShowLegend(false);       


        for(int k=0;k<12;k++)
        {
            renderer.addXTextLabel(k+1,"test");
        }

        if (mChartView == null) 
        {
            Log.d("Oncreate ","if (mChartView == null)");
            mChartView = ChartFactory.getLineChartView(this,mDataset(titles,x,values),renderer);
            layout.addView(mChartView,new LayoutParams(
                    LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));




        } 
        else 
        {
            mChartView.repaint();
            Log.d("Oncreate ","if (mChartView != null)");
        }
    }

    private void setChartSettings(XYMultipleSeriesRenderer renderer3,String title,String xTitle,String yTitle,double xMin,double xMax,double yMin,double yMax,int axesColor,int labelsColor) {
        // Todo Auto-generated method stub

        renderer3.setChartTitle(title);
        renderer3.setXTitle(xTitle);
        renderer3.setYTitle(yTitle);
        renderer3.setXAxisMin(xMin);
        renderer3.setXAxisMax(xMax);
        renderer3.setYAxisMin(yMin);
        renderer3.setYAxisMax(yMax);
        renderer3.setAxesColor(axesColor);
        renderer3.setLabelsColor(labelsColor);
    }

    private XYMultipleSeriesRenderer buildrenderer(int[] colors,PointStyle[] styles) {
        // Todo Auto-generated method stub
        XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer();
        setRenderer(renderer,colors,styles);
        return renderer;
    }

    private void setRenderer(XYMultipleSeriesRenderer renderer2,int[] colors,PointStyle[] styles) {
        // Todo Auto-generated method stub
        renderer2.setAxisTitleTextSize(16);
        renderer2.setChartTitleTextSize(20);
        renderer2.setLabelsTextSize(15);
        renderer2.setLegendTextSize(15);
        renderer2.setPointSize(5f);
        renderer2.setMargins(new int[] { 20,30,20 });
        int length = colors.length;
        for (int i = 0; i < length; i++) {
            XYSeriesRenderer r = new XYSeriesRenderer();
            r.setColor(colors[i]);
            r.setPointStyle(styles[i]);
            renderer2.addSeriesRenderer(r);
        }
    }

    private XYMultipleSeriesDataset mDataset(String[] titles,List<double[]> xValues,List<double[]> yValues) {
        // Todo Auto-generated method stub
        XYMultipleSeriesDataset dataset1 = new XYMultipleSeriesDataset();
        addXYSeries(dataset1,titles,xValues,yValues,0);
        return dataset1;
    }

    private void addXYSeries(XYMultipleSeriesDataset dataset,String[] titles,List<double[]> yValues,int scale) {
        // Todo Auto-generated method stub

        int length = titles.length;
        for (int i = 0; i < length; i++) {


            double[] xV = xValues.get(i);
            XYSeries series = new XYSeries(titles[i],scale);
            double[] yV = yValues.get(i);
            int seriesLength = xV.length;
            for (int k = 0; k < seriesLength; k++) {
                    series.add(xV[k],yV[k]);
            }
            dataset.addSeries(series);
        }



    }

}

能帮到我了吗?

解决方法

最后我得到了解决方案我已经尝试过以下代码:
renderer.setXLabels(0);

和完整的类代码:

package com.example.lockexample;

import java.util.ArrayList;
import java.util.List;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.PointStyle;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.os.Bundle;
import android.util.Log;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;

public class ChartExample extends Activity {
    private GraphicalView mChartView;

    XYMultipleSeriesRenderer renderer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // Todo Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_chart);

        LinearLayout layout = (LinearLayout) findViewById(R.id.linearLayout2);

        String[] titles = new String[] { "spens1",Color.LTGRAY);
        //renderer.setXLabels(12);
        renderer.setYLabels(10);
        renderer.setXLabels(0);
        renderer.setShowGrid(true);
        renderer.setXLabelsAlign(Align.CENTER);
        renderer.setYLabelsAlign(Align.RIGHT);
        renderer.setMargins(new int[] { 25,35,15 });
        //renderer.setZoomButtonsVisible(true);
        //renderer.setPanLimits(new double[] { 0,false);

        renderer.setMarginsColor(Color.parseColor("#EEEDED"));
        renderer.setXLabelsColor(Color.BLACK);
        renderer.setYLabelsColor(0,Color.BLACK);

        renderer.setApplyBackgroundColor(true);
        renderer.setBackgroundColor(Color.parseColor("#FBFBFC"));
        //renderer.setShowLegend(false);       


        for(int k=0;k<12;k++)
        {
            renderer.addXTextLabel(k+1,int labelsColor) {
        // Todo Auto-generated method stub

        renderer3.setChartTitle(title);
        renderer3.setXTitle(xTitle);
        renderer3.setYTitle(yTitle);
        renderer3.setXAxisMin(xMin);
        renderer3.setXAxisMax(xMax);
        renderer3.setYAxisMin(yMin);
        renderer3.setYAxisMax(yMax);
        renderer3.setAxesColor(axesColor);
        renderer3.setLabelsColor(labelsColor);

    }

    private XYMultipleSeriesRenderer buildrenderer(int[] colors,PointStyle[] styles) {
        // Todo Auto-generated method stub
        renderer2.setAxisTitleTextSize(16);
        renderer2.setChartTitleTextSize(20);
        renderer2.setLabelsTextSize(15);
        renderer2.setLegendTextSize(15);
        renderer2.setPointSize(5f);
        //renderer2.setMargins(new int[] { 20,20 });
        renderer2.setMargins(new int[] { 25,15 });

        int length = colors.length;
        for (int i = 0; i < length; i++) {
            XYSeriesRenderer r = new XYSeriesRenderer();
            r.setColor(colors[i]);
            r.setPointStyle(styles[i]);
            renderer2.addSeriesRenderer(r);
        }
    }

    private XYMultipleSeriesDataset mDataset(String[] titles,yV[k]);
            }
            dataset.addSeries(series);
        }



    }

}

Android AChartEngine – 无法更改Y轴标签的textColor

Android AChartEngine – 无法更改Y轴标签的textColor

在 Android上使用AChartEngine(JAR 1.0.0)时,我看到一种允许我更改X轴文本颜色的方法(mRenderer.setXLabelsColor(Color.BLACK))

不幸的是我无法找到Y轴标签的相应方法!

还有办法设置实际折线图的颜色吗?

我还尝试使用标签对齐Y轴左侧的标签

mRenderer.setYAxisAlign(Align.LEFT,0);   
mRenderer.setYLabelsAlign(Align.LEFT,0);

但它似乎确实有效.

解决方法

有renderer.setYLabelsColor();用于设置Y轴标签颜色.

使用Align.LEFT时,表示它们左对齐,如果要在轴的左侧右对齐它们,请使用Align.RIGHT.

折线图颜色是来自其自己的渲染器的颜色.

关于我的Android AChartEngine已经可以使用,但如何让它看起来不错?android acodec的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于AChartEngine和Android Studio、AChartEngine实现Android实时时间变化曲线、AchartEngine折线图Xaxis Android、Android AChartEngine – 无法更改Y轴标签的textColor的相关知识,请在本站寻找。

本文标签: