用MPAndroidChart实现可滑动的柱状图

用MPAndroidChart实现可滑动的柱状图

大家好,又见面了,我是全栈君。

转载时请记得标明源地址:https://my.oschina.net/lijindou/blog/799927

本人博客地址:  http://my.oschina.net/lijindou/blog

源码地址:http://download.csdn.net/detail/qq_33144317/9699763

其实原理很简单,就是将视图横向放大,然后 就成了滑动的 柱状图了

我就直接上图上代码了 

图:

102757_Fl1V_2728799.png

代码:

MainActivity.java

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;

import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;

import java.util.ArrayList;

/**
 * @author Gold Bean Lee
 * @time 20161202
 */
public class MainActivity extends Activity {

    private BarChart mBarChart;
    private BarChart mBarChart1;
    private BarChart mBarChart2;
    private BarCharts mBarCharts;

    private String[] color = {"#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD", "#C4FF8E", "#FFF88D", "#FFD38C", "#8CEBFF", "#FF8F9D", "#6BF3AD"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mBarCharts = new BarCharts();

        // 创建多张图表
        mBarChart = (BarChart) findViewById(R.id.spreadBarChart);
        mBarChart1 = (BarChart) findViewById(R.id.spreadBarChart1);
        mBarChart2 = (BarChart) findViewById(R.id.spreadBarChart2);

        mBarCharts.showBarChart(mBarChart, getBarData(10, 99), true);
        mBarCharts.showBarChart(mBarChart1, getBarData(20, 199), true);
        mBarCharts.showBarChart(mBarChart2, getBarData(20, 199), false);

    }

    /**
     * 这个方法是初始化数据的
     *
     * @param count X 轴的个数
     * @param range Y 轴的数据
     */
    public BarData getBarData(int count, float range) {
        ArrayList<String> xValues = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            xValues.add("" + (i + 1) + "");// 设置每个柱壮图的文字描述
        }

        ArrayList<BarEntry> yValues = new ArrayList<>();
        for (int i = 0; i < count; i++) {
            float value = (float) (Math.random() * range/*100以内的随机数*/) + 3;
            yValues.add(new BarEntry(value, i));
        }
        // y轴的数据集合
        BarDataSet barDataSet = new BarDataSet(yValues, "测试图");
        ArrayList<Integer> colors = new ArrayList<>();
        for (int i = 0; i < count; i++) {
//            colors.add(Color.parseColor("#75bfe2"));
            colors.add(Color.parseColor(color[i]));
        }
        barDataSet.setColors(colors);
        // 设置栏阴影颜色
        barDataSet.setBarShadowColor(Color.parseColor("#01000000"));
        ArrayList<BarDataSet> barDataSets = new ArrayList<>();
        barDataSets.add(barDataSet);
        barDataSet.setValueTextColor(Color.parseColor("#FF8F9D"));
        // 绘制值
        barDataSet.setDrawValues(true);
        BarData barData = new BarData(xValues, barDataSets);
        return barData;
    }

}

BarCharts.java

import android.graphics.Color;
import android.graphics.Matrix;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.data.BarData;

/**
 * @author Gold Bean Lee
 * @time 20161202
 */
public class BarCharts {

    /**
     * @param barChart  控件
     * @param barData   数据
     * @param isSlither 用来控制是否可以滑动
     */
    public void showBarChart(BarChart barChart, BarData barData, boolean isSlither) {
        //绘制高亮箭头
        barChart.setDrawHighlightArrow(false);
        //设置值显示在柱状图的上边或者下边
        barChart.setDrawValueAboveBar(true);
        //设置绘制网格背景
        barChart.setDrawGridBackground(true);
        //设置双击缩放功能
        barChart.setDoubleTapToZoomEnabled(false);
        //设置规模Y启用
        barChart.setScaleYEnabled(false);
        //设置规模X启用
        barChart.setScaleXEnabled(false);
        //启用设置阻力
        barChart.setScaleEnabled(true);
        //设置每个拖动启用的高亮显示
        barChart.setHighlightPerDragEnabled(false);
        // 设置硬件加速功能
        barChart.setHardwareAccelerationEnabled(true);
        // 设置绘制标记视图
        barChart.setDrawMarkerViews(true);
        // 设置启用日志
        barChart.setLogEnabled(true);
        // 设置突出功能
        barChart.setHighlightEnabled(true);
        // 设置拖动减速功能
        barChart.setDragDecelerationEnabled(true);
        // 数据描述
        barChart.setDescription("");
        // 如果没有数据的时候,会显示这个,类似ListView的EmptyView
        barChart.setNoDataTextDescription("没有数据了");
        barChart.setNoDataText("O__O …");
        // 是否显示表格颜色  
        barChart.setDrawGridBackground(false);


        /**
         * 下面这几个属性你们可以试试 挺有意思的
         * */
        // 设置是否可以触摸
        barChart.setTouchEnabled(isSlither);
        // 是否可以拖拽
        barChart.setDragEnabled(isSlither);//放大可拖拽
        // 是否可以缩放
        barChart.setScaleEnabled(false);
        // 集双指缩放
        barChart.setPinchZoom(false);


        // 设置背景
        barChart.setBackgroundColor(Color.parseColor("#01000000"));
        // 如果打开,背景矩形将出现在已经画好的绘图区域的后边。
        barChart.setDrawGridBackground(false);
        // 集拉杆阴影
        barChart.setDrawBarShadow(false);
        // 图例
        barChart.getLegend().setEnabled(false);
        // 设置数据
        barChart.setData(barData);
        // 隐藏右边的坐标轴 (就是右边的0 - 100 - 200 - 300 ... 和图表中横线)
        barChart.getAxisRight().setEnabled(false);
        // 隐藏左边的左边轴 (同上)
        // 网格背景颜色
        barChart.setGridBackgroundColor(Color.parseColor("#00000000"));
        // 是否显示表格颜色
        barChart.setDrawGridBackground(false);
        // 设置边框颜色
        barChart.setBorderColor(Color.parseColor("#00000000"));
        // 说明颜色
        barChart.setDescriptionColor(Color.parseColor("#00000000"));
        // 拉杆阴影
        barChart.setDrawBarShadow(false);
        // 打开或关闭绘制的图表边框。(环绕图表的线)
        barChart.setDrawBorders(false);
        Legend mLegend = barChart.getLegend(); // 设置比例图标示
        // 设置窗体样式
        mLegend.setForm(Legend.LegendForm.CIRCLE);
        // 字体
        mLegend.setFormSize(4f);
        // 字体颜色
        mLegend.setTextColor(Color.parseColor("#00000000"));
        XAxis xAxis = barChart.getXAxis();
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
        xAxis.setDrawGridLines(false);
        xAxis.setSpaceBetweenLabels(2);
//        xAxis.setTextColor(0x000000); // 设置轴标签的颜色。
//        xAxis.setTextSize(18); // 设置轴标签的文字大小。
//        xAxis.setTypeface( ) ;// 设置轴标签的 Typeface。
//        xAxis.setGridColor( int color); /// 设置该轴的网格线颜色。
//        xAxis.setGridLineWidth( float width);// 设置该轴网格线的宽度。
//        xAxis.setAxisLineColor( int color); // 设置轴线的轴的颜色。
//        xAxis.setAxisLineWidth( float width);// 设置该轴轴行的宽度。
//        barChart.animateY(1000); // 立即执行的动画,Y轴

        if (isSlither) {
            //当为true时,放大图
            // 为了使 柱状图成为可滑动的,将水平方向 放大 2.5倍
            barChart.invalidate();
            Matrix mMatrix = new Matrix();
            mMatrix.postScale(2f, 1f);
            barChart.getViewPortHandler().refresh(mMatrix, barChart, false);
            barChart.animateY(1000);
        } else {
            //当为false时 不对图进行操作
            barChart.animateY(1000);
        }


    }

}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="dialog.com.mp.MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <com.github.mikephil.charting.charts.BarChart
                        android:id="@+id/spreadBarChart"
                        android:layout_width="match_parent"
                        android:layout_height="200dp"
                        android:layout_gravity="center_horizontal" />

                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <com.github.mikephil.charting.charts.BarChart
                        android:id="@+id/spreadBarChart1"
                        android:layout_width="match_parent"
                        android:layout_height="200dp"
                        android:layout_gravity="center_horizontal" />
                </LinearLayout>
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">


                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">

                    <com.github.mikephil.charting.charts.BarChart
                        android:id="@+id/spreadBarChart2"
                        android:layout_width="match_parent"
                        android:layout_height="200dp"
                        android:layout_gravity="center_horizontal" />
                </LinearLayout>
            </LinearLayout>

            <!--<RelativeLayout-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content">-->
            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart2"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->
            <!--</RelativeLayout>-->

            <!--<RelativeLayout-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content">-->
            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart3"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->
            <!--</RelativeLayout>-->

            <!--<RelativeLayout-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="wrap_content">-->
            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart4"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->
            <!--</RelativeLayout>-->

            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart5"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->

            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart6"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->

            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart7"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->

            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart8"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->

            <!--<com.github.mikephil.charting.charts.BarChart-->
            <!--android:id="@+id/spreadBarChart9"-->
            <!--android:layout_width="match_parent"-->
            <!--android:layout_height="200dp"-->
            <!--android:layout_gravity="center_horizontal"/>-->
        </LinearLayout>
    </ScrollView>

</LinearLayout>

 

转载于:https://my.oschina.net/lijindou/blog/799927

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108742.html原文链接:https://javaforall.net

(0)
上一篇 2022年2月23日 上午6:00
下一篇 2022年2月23日 上午7:00


相关推荐

  • Java的finalize方法干什么_Java finalize

    Java的finalize方法干什么_Java finalize我们通常用构造器来创建对象,而Finalize正好相反,构造方法执行对象的初始化操作,finalize方法执行对象的销毁操作.那我们什么时候需要使用finalize方法呢,我们都知道Java里垃圾回收器可以回收对象使用的内存空间,但是对象可能会持有很多资源比如Socket、文件句柄等,垃圾收集器无法回收这些资源,因此你需要使用finalize方法帮助GC回收这些资源,比如关闭打开的文件或者网元资源,删除临时文件等.一个例子Object类是所有类的父类,如果你去查看java.lang.Object类

    2026年1月26日
    3
  • 文件上传linux文件名乱码_java导出文件名中文乱码

    文件上传linux文件名乱码_java导出文件名中文乱码从网上下了一个zip文件,unzip解压后发现中文显示都是乱码,以前也遇到过打开Windows系统下目录文件名也是乱码的问题。这是什么原因呢?文件是在Windows下创建的,而Windows的文件名中文编码默认GBK,Linux中默认文件名编码为UTF-8,编码不一致导致了文件名乱码的问题,解决这个问题需要对文件名进行转码,这个工具就是convmv。SYNOPSIS:convmv…

    2022年8月31日
    6
  • 离散数学谓词逻辑答案_离散数学逻辑符号

    离散数学谓词逻辑答案_离散数学逻辑符号1谓词1.1引入在研究命题逻辑中,原子命题是命题演算中最基本的单位,不再对原子命题进行分解,这样会产生两大缺点:(1)不能研究命题内部的结构,成分和内部逻辑的特征;(2)也不可能表达两个原子命

    2022年8月3日
    9
  • Java除法运算(保留小数)

    Java除法运算(保留小数)编程的人都知道,java中的“/”、“%”运算,其中前者为取整,后者取余数。那么有没有快捷的运算方法取正常的运算结果呢?查了资料,发现很简单。代码如下: /** *TODO除法运算,保留小数 *@author袁忠明 *@date2018-4-17下午2:24:48 *@parama被除数 *@paramb除数 *@return商 */ pu…

    2022年5月3日
    51
  • 服务器bios界面usb无线网卡,BIOS怎么开启无线网卡

    服务器bios界面usb无线网卡,BIOS怎么开启无线网卡

    2021年8月16日
    66
  • 千问QwQ32B本地部署与远程访问全流程实测指南

    千问QwQ32B本地部署与远程访问全流程实测指南

    2026年3月13日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号