用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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Git下载安装及设置详细教程

    Git下载安装及设置详细教程文章作者:Wendell原文地址:https://www.jianshu.com/p/a152f82c5e4a转载请注明出处!一、安装前准备  1.廖雪峰老师Git教程:推荐Git入门教程。  2.按照自己的系统版本下载Git软件,我的操作系统:Windows764位,安装版本为Git-2.18.0-64-bit.exe(截至201…

    2022年4月28日
    50
  • 此av非彼”AV”

    此av非彼”AV”作者:王亨 ,R语言中文社区专栏作者,跟着菜鸟一起一步步学习R语言,争做R语言高手。个人公众号:跟着菜鸟一起学R语言(微信ID:learn_R) 最近发现一个特别有意思的…

    2022年9月22日
    0
  • 计算流体力学基础与网格概述(与书同行)——ANSYS ICEM CFD网格划分从入门到精通——丁源「建议收藏」

    计算流体力学基础与网格概述(与书同行)——ANSYS ICEM CFD网格划分从入门到精通——丁源「建议收藏」一、计算流体力学基础:1、 建立物理模型,将其抽象为数学、力学模型后,要分析几何体的空间影响区域;2、 建立整个几个形体与其空间影响区域(计算区域的CAD模型),将整个计算区域进行空间网格划分。3、 加入求解所需要的初始条件;4、 选择适当的算法,设置具体的控制求解过程和精度的一些条件,对所研究的问题进行分析,保存数据文件结果;5、 选择合适的后处理器(postprocessor)读取计算结果文件,分析并且显示出来。数值模拟方法:1、 有限差分法;2、 有限元法;3、 有限体积法;子域法

    2022年5月26日
    48
  • checkbox选中触发事件_jquery select change事件

    checkbox选中触发事件_jquery select change事件aspx页面部分代码:                                 CommandName=”LookDetail”>        AutoPostBack=”True”>         asdf         asdfasdf         wrwwewewee                          cs部分代码:cs部分代码:///  ///设计器支

    2022年9月11日
    0
  • jmeter-http代理服务器,录制脚本,抓包-包含模式,过滤指定域名(url)数据

    jmeter-http代理服务器,录制脚本,抓包-包含模式,过滤指定域名(url)数据

    2021年9月18日
    86
  • linux 时间戳转换/dmesg 时间转换

    linux 时间戳转换/dmesg 时间转换dmesg时间转换dmesg输出的格式不易查看,可以通过命令进行转换。记录如下:时间查看:date-d”1970-01-01UTC`echo”$(date+%s)-$(cat/proc/uptime|cut-f1-d”)+12288812.926194″|bc`seconds”/proc/uptime详解在Linux中

    2022年10月2日
    0

发表回复

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

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