`
VIP庚
  • 浏览: 223916 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Android 开源图表库 ------ MPAndroidChart

 
阅读更多
  最近在开发心率方面,要绘制心率图,准备自己写自定义view来实现,查找资料时发现了一款基于Android的开源图表库 -- MPAndroidChart 在github上 已经commits 1500次,经常在维护,想必功能还是很完善,bug很少的。
  github地址:https://github.com/PhilJay/MPAndroidChart
  可以通过导入库的方式来将该库引入自己的项目
  也可以在这里 https://github.com/PhilJay/MPAndroidChart/releases 通过下载最新mpandroidchartlibrary-2-0-8.jar包, 然后copy到项目的libs中
 
  MPAndroidChart主要功能特点:
      支持x,y轴缩放
      支持拖拽
      支持手指滑动
      支持高亮显示
      支持保存图表到文件中
      支持从文件(txt)中读取数据
      预先定义颜色模板
      自动生成标注
      支持自定义x,y轴的显示标签
      支持x,y轴动画
      支持x,y轴设置最大值和附加信息
      支持自定义字体,颜色,背景,手势,虚线等

具体使用方法可以参考在下载的demo中的MPChartExample里
这里介绍一下主要api:
setDescription(String desc) //设置表格的描述
setDescriptionTypeface(Typeface t) //自定义表格中显示的字体
setDrawYValues(boolean enabled) // 设置是否显示y轴的值的数据
setValuePaintColor(int color) //设置表格中y轴的值的颜色,但是必须设置 setDrawYValues(true)
setValueTypeface(Typeface t)//设置字体
setValueFormatter(DecimalFormat format) // 设置显示的格式
setPaint(Paint p, int which) // 自定义笔刷
public ChartData getDataCurrent() //返回ChartData对象当前显示的图表。它包含了所有信息的显示值最小和最大值等
public float getYChartMin() // 返回当前最小值
public float getYChartMax() //返回当前最大值
public float getAverage() //返回所有值的平均值。
public float getAverage(int type) //返回平均值
public PointF getCenter() // 返回中间点
public Paint getPaint(int which) //得到笔刷
setTouchEnabled(boolean enabled) //设置是否可以触摸,如为false,则不能拖动,缩放等
setDragScaleEnabled(boolean enabled) //设置是否可以拖拽,缩放
setOnChartValueSelectedListener(OnChartValueSelectedListener l) //设置表格上的点,被点击的时候,的回调函数
setHighlightEnabled(boolean enabled) // 设置点击value的时候,是否高亮显示
public void highlightValues(Highlight[] highs) // 设置高亮显示
saveToGallery(String title) // 保存图表到图库中
saveToPath(String title, String pathOnSD) //保存.
setScaleMinima(float x, float y) // 设置最小的缩放
centerViewPort(int xIndex, float val)// 设置视口
fitScreen() // 适应屏幕



demo中的简单实例
public class RealtimeLineChartActivity extends DemoBase implements
        OnChartValueSelectedListener {

    private LineChart mChart;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_realtime_linechart);

        mChart = (LineChart) findViewById(R.id.chart1);
        mChart.setOnChartValueSelectedListener(this);

        // no description text
        mChart.setDescription("");//设置图表描述信息
        mChart.setNoDataTextDescription("You need to provide data for the chart.");

        // enable touch gestures
        mChart.setTouchEnabled(true);       // 设置是否可以触摸

        // enable scaling and dragging
        mChart.setDragEnabled(true);        // 是否可以拖拽
        mChart.setScaleEnabled(true);       // 是否可以缩放
        mChart.setDrawGridBackground(false);         //设置是否显示表格

        // if disabled, scaling can be done on x- and y-axis separately
        mChart.setPinchZoom(true);

        // set an alternative background color
        mChart.setBackgroundColor(Color.LTGRAY);

        LineData data = new LineData();
        data.setValueTextColor(Color.WHITE);

        // add empty data
        mChart.setData(data);

        Typeface tf = Typeface.createFromAsset(getAssets(), "OpenSans-Regular.ttf");

        // get the legend (only possible after setting data)
        Legend l = mChart.getLegend();      // 设置比例图标示,就是那个一组y的value的

        // modify the legend ...
        // l.setPosition(LegendPosition.LEFT_OF_CHART);
        l.setForm(LegendForm.LINE);
        l.setTypeface(tf);
        l.setTextColor(Color.WHITE);

        XAxis xl = mChart.getXAxis();//设置是否显示表格
        xl.setTypeface(tf);
        xl.setTextColor(Color.WHITE);
        xl.setDrawGridLines(false);//设置是否显示X轴表格
        xl.setAvoidFirstLastClipping(true);//设置x轴起点和终点label不超出屏幕
        xl.setSpaceBetweenLabels(5);// 设置x轴label间隔
        xl.setEnabled(true);
        //xl.setPosition(XAxisPosition.BOTTOM);       //设置X轴的显示位置


        YAxis leftAxis = mChart.getAxisLeft();//得到图表的左侧Y轴实例
        leftAxis.setTypeface(tf);
        leftAxis.setTextColor(Color.WHITE);
        leftAxis.setAxisMaxValue(100f);// 设置Y轴最大值
        leftAxis.setAxisMinValue(0f);// 设置Y轴最小值。
        leftAxis.setDrawGridLines(true);
        // leftAxis.enableGridDashedLine(10f, 10f, 0f); //设置横向表格为虚线

        // limit lines are drawn behind data (and not on top)
        // leftAxis.setDrawLimitLinesBehindData(true);


        YAxis rightAxis = mChart.getAxisRight();//设置右侧Y轴不可用(这里可以向得到左侧Y轴那样,得到右侧Y轴实例去处理)
        rightAxis.setEnabled(false);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.realtime, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            case R.id.actionAdd: {
                addEntry();
                break;
            }
            case R.id.actionClear: {
                mChart.clearValues();
                Toast.makeText(this, "Chart cleared!", Toast.LENGTH_SHORT).show();
                break;
            }
            case R.id.actionFeedMultiple: {
                feedMultiple();
                break;
            }
        }
        return true;
    }

    private int year = 2015;

    private void addEntry() {

        LineData data = mChart.getData();

        if (data != null) {

            ILineDataSet set = data.getDataSetByIndex(0);
            // set.addEntry(...); // can be called as well

            if (set == null) {
                set = createSet();
                data.addDataSet(set);
            }

            // add a new x-value first
            data.addXValue(mMonths[data.getXValCount() % 12] + " "
                    + (year + data.getXValCount() / 12));
            data.addEntry(new Entry((float) (Math.random() * 40) + 30f, set.getEntryCount()), 0);


            // let the chart know it's data has changed
            mChart.notifyDataSetChanged();

            // limit the number of visible entries
            mChart.setVisibleXRangeMaximum(120);
            // mChart.setVisibleYRange(30, AxisDependency.LEFT);

            // move to the latest entry
            mChart.moveViewToX(data.getXValCount() - 121);

            // this automatically refreshes the chart (calls invalidate())
            // mChart.moveViewTo(data.getXValCount()-7, 55f,
            // AxisDependency.LEFT);
        }
    }

    private LineDataSet createSet() {

        LineDataSet set = new LineDataSet(null, "Dynamic Data");
        set.setAxisDependency(AxisDependency.LEFT);
        set.setColor(ColorTemplate.getHoloBlue());
        set.setCircleColor(Color.WHITE);
        set.setLineWidth(2f);
        set.setCircleRadius(4f);
        set.setFillAlpha(65);
        set.setFillColor(ColorTemplate.getHoloBlue());
        set.setHighLightColor(Color.rgb(244, 117, 117));
        set.setValueTextColor(Color.WHITE);
        set.setValueTextSize(9f);
        set.setDrawValues(false);
        return set;
    }

    private void feedMultiple() {

        new Thread(new Runnable() {

            @Override
            public void run() {
                for (int i = 0; i < 500; i++) {

                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            addEntry();
                        }
                    });

                    try {
                        Thread.sleep(35);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }
            }
        }).start();
    }

    @Override
    public void onValueSelected(Entry e, int dataSetIndex, Highlight h) {
        Log.i("Entry selected", e.toString());
    }

    @Override
    public void onNothingSelected() {
        Log.i("Nothing selected", "Nothing selected.");
    }
}




下面是几张demo中运行的效果图:



















自己的心率图:


  • 大小: 666.3 KB
  • 大小: 478 KB
  • 大小: 306.6 KB
  • 大小: 211.4 KB
  • 大小: 519 KB
  • 大小: 527.5 KB
  • 大小: 237.1 KB
0
2
分享到:
评论

相关推荐

    Android开源图表库MPAndroidChart的jar包

    MPAndroidChart是一个强大的Android平台上的开源图表库,它允许开发者轻松地在应用程序中展示各种类型的图表,如折线图、柱状图、饼图、散点图等。这个库由Phil Jay开发,提供了丰富的定制选项,使图表可以按照...

    MPAndroidChart开源图表库

    MPAndroidChart是一个强大的开源图表库,专为Android平台设计,用于在应用程序中创建各种图表,如折线图、饼状图和柱状图。这个库提供了丰富的自定义选项,允许开发者根据自己的需求调整图表样式,颜色,动画效果等...

    开源图表库MPAndroidChart的简化版

    MPAndroidChart是一款在Android平台上广泛使用的开源图表库,它的强大功能和灵活性使其在开发者社区中备受青睐。这个简化版保留了其核心特性,适合那些对复杂图表需求不高的项目,或者希望快速集成图表功能的开发者...

    android开源图表库MPAndroidChart Demo

    MPAndroidChart是一款强大的Android平台上的开源图表库,它允许开发者轻松地在应用程序中集成各种图表类型,如曲线图、直方图和饼状图。这个库由Phil Jay开发,提供了丰富的自定义选项,使得图表的视觉表现力和交互...

    Android开源图表库测试demo

    这个"Android开源图表库测试demo"是针对` MpAndroidChart `进行的一个简单实践,主要涉及了PieChart的使用。 ` MpAndroidChart `库由Phil Jay开发,其优点在于易用性、灵活性以及丰富的图表类型。它支持多种图表,...

    MPAndroidChart-v3.0.3.jar

    MPAndroidChart是一个强大的开源库,专门用于在Android平台上创建各种类型的图表。这个库是由Phil Jay开发的,并且在GitHub上广受欢迎,因为它提供了丰富的图表类型和高度自定义的选项。标题中的"MPAndroidChart-v...

    iOS-Charts开源图表库使用(安卓MPAndroidChart的移植)

    iOS-Charts是一个专门为iOS平台设计的开源图表库,它是基于Android平台上的MPAndroidChart库进行移植的。这个库为开发者提供了丰富的图表类型,包括折线图、饼状图和雷达图,非常适合用于数据可视化和信息展示。在...

    MPAndroidChart-v3.0.2.zip

    MPAndroidChart-v3.0.2jar 官方免费下载 Android charts MPAndroidChart是一款基于Android的开源图表库,MPAndroidChart不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,应用起来非常...

    MPAndroidChart-v3.0.3.zip

    总的来说,MPAndroidChart-v3.0.3是一个强大且易用的Android图表库,可以帮助开发者快速地在应用中创建美观且功能丰富的图表,无论是用于数据分析、数据可视化还是用户交互,都能提供出色的性能和体验。

    MPAndroidChart-3.0.3 源码

    MPAndroidChart是一个强大的开源库,用于在Android平台上创建各种图表和图形。它的版本3.0.3是一个重要的里程碑,提供了丰富的功能和优化的性能。在这个版本中,开发者可以找到实现专业图表界面的所有必要组件,包括...

    MPAndroidChart-master

    MPAndroidChart是一款在Android平台上广泛使用的开源图表库,它的标题"MPAndroidChart-master"表明这是一个项目的主分支或者主版本,通常包含完整的源代码和资源文件。这个库的主要目标是为开发者提供一个强大、灵活...

    MPAndroidChart-master(图表—折线、柱状图、扇形图等).zip

    MPAndroidChart是一个强大的开源库,用于在Android平台上创建各种类型的图表,包括折线图、柱状图、饼图(扇形图)等。这个库由Phil Jay开发,并且被广泛应用于移动应用中,以可视化数据并提供用户友好的交互体验。 ...

    android 图表 MPAndroidChart demo

    MPAndroidChart是一款强大的开源库,用于在Android平台上创建各种图表。这款库由Phil Jay开发,提供了丰富的图表类型,包括线图、柱状图、饼图、雷达图等,且具有高度自定义化的能力,使开发者能够轻松地为应用程序...

    Android图表折线-柱状-圆饼图示例

    在Android中,我们可以使用开源库如MPAndroidChart来创建折线图。首先,需要在项目中引入该库的依赖: ```xml dependencies { implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' } ``` 然后,创建一个`...

    Android图形绘制-MPAndroidChart

    MPAndroidChart是一个强大的开源库,专为Android平台设计,用于创建各种类型的图表,如线图、柱状图、饼图等。本教程将深入讲解如何利用MPAndroidChart的最新版本(2.1.6)进行线性图表的绘制。 首先,你需要在项目...

    MPAndroidChart-v3.0.3.jar 最新版本

    MPAndroidChart-v3.0.3是一个强大且易用的Android图表库,为开发者提供了丰富的图表选择和高度定制的选项,无论是用于数据分析还是用户界面设计,都是一个理想的选择。了解并熟练使用这个库,能帮助开发者创建出更具...

    Android图表库MPAndroidChart.zip

    MPAndroidChart 是 Android 系统上一款开源的图表库。目前提供线图和饼图,支持选择、缩放和拖放。 示例代码: LineData ld = new LineData(...); LimitLine ll = new LimitLine(140f); ll.setLineColor...

    MPAndroidChart-3.0.1.tar安卓图表源码插件

    MPAndroidChart是一款流行的开源库,用于在Android平台上创建各种数据可视化...通过研究MPAndroidChart-3.0.1的源码,不仅可以提升对Android图形绘制和数据处理的理解,还能够掌握如何优化图表库以适应不同的应用场景。

    MPAndroidChart-master 各种图表

    MPAndroidChart是一款强大的开源库,专门用于在Android平台上创建各种图表。这个库由Phil Jay开发,提供了丰富的图表类型,如线图、柱状图、饼图、散点图、雷达图等,支持自定义样式,使得开发者能轻松地在移动应用...

    实时曲线---MPAndroidChart

    MPAndroidChart是一个强大的开源库,由Phil Jay开发,用于创建各种类型的图表,如折线图、柱状图、饼图等,适用于数据分析和可视化。 MPAndroidChart库提供了丰富的API和定制选项,开发者可以方便地调整颜色、样式...

Global site tag (gtag.js) - Google Analytics