Android 柱状图

依赖

compile 'org.xclcharts:lib:2.4'

自定义view1

/**
 * @ClassName DemoView
 * @Description  各个例子view的view基类
 */
public class DemoView extends ChartView{public DemoView(Context context) {super(context);
        // TODO Auto-generated constructor stub
    }public DemoView(Context context, AttributeSet attrs){super(context, attrs);

    }public DemoView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);

    }//Demo中bar chart所使用的默认偏移值。
    //偏移出来的空间用于显示tick,axistitle....
    protected int[] getBarLnDefaultSpadding(){int [] ltrb = new int[4];
        ltrb[0] = DensityUtil.dip2px(getContext(), 40); //left
        ltrb[1] = DensityUtil.dip2px(getContext(), 60); //top
        ltrb[2] = DensityUtil.dip2px(getContext(), 20); //right
        ltrb[3] = DensityUtil.dip2px(getContext(), 40); //bottom
        return ltrb;
    }protected int[] getPieDefaultSpadding(){int [] ltrb = new int[4];
        ltrb[0] = DensityUtil.dip2px(getContext(), 20); //left
        ltrb[1] = DensityUtil.dip2px(getContext(), 65); //top
        ltrb[2] = DensityUtil.dip2px(getContext(), 20); //right
        ltrb[3] = DensityUtil.dip2px(getContext(), 20); //bottom
        return ltrb;
    }@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);

    }}

自定义view2

/**
 * @ClassName SpinnerBarChart01View
 * @Description  柱形图同数据源不同柱形图切换的例子
 */
public class SpinnerBarChart01View extends DemoView {private String TAG = "SpinnerBarChart01View";

    private int mChartStyle = 0;
    private int mOffsetHeight = 0;
    private BarChart mChart = null;
    //标签轴
    private List<String> chartLabels = new LinkedList<String>();
    private List<BarData> chartData = new LinkedList<BarData>();

    public SpinnerBarChart01View(Context context, int chartStyle, int offsetHeight) {//主要构造方法
        super(context);
        // TODO Auto-generated constructor stub

        mChartStyle = chartStyle;
        mOffsetHeight = offsetHeight;
        chartLabels();
        chartDataSet();
        chartRender();
    }private void initChart(int chartStyle){switch(chartStyle){case 0: //竖向柱形图
                mChart = new BarChart();
                //图例
                mChart.getAxisTitle().setLeftTitle("百分比");
                break;
            case 1:    //横向柱形图
                mChart = new BarChart();
                mChart.setChartDirection(XEnum.Direction.HORIZONTAL);
                break;
            case 2:    //竖向3D柱形图
                mChart = new BarChart3D();
                break;
            case 3:    //横向3D柱形图
                mChart = new BarChart3D();
                mChart.setChartDirection(XEnum.Direction.HORIZONTAL);
                break;
            case 4:    //竖向堆叠柱形图
                mChart = new StackBarChart();
                ((StackBarChart) mChart).setTotalLabelVisible(false);
                break;
            case 5:    //横向堆叠柱形图
                mChart = new StackBarChart();
                mChart.setChartDirection(XEnum.Direction.HORIZONTAL);
                ((StackBarChart) mChart).setTotalLabelVisible(false);
                break;
        }}@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);
        //图所占范围大小
        //mChart.setChartRange(w,h);
    }public void chartRender(){try {initChart(mChartStyle);

            //设置绘图区默认缩进px值,留置空间显示Axis,Axistitle....
            int [] ltrb = getBarLnDefaultSpadding();
            mChart.setPadding(DensityUtil.dip2px(getContext(), 50),ltrb[1], ltrb[2], ltrb[3]);
            //主图缩进left, float top, float right,float bottom


            //数据源
            mChart.setDataSource(chartData);//图形数据
            mChart.setCategories(chartLabels);//底部标签

            //数据轴
            mChart.getDataAxis().setAxisMax(100);
            mChart.getDataAxis().setAxisMin(0);
            mChart.getDataAxis().setAxisSteps(20);

            //定义数据轴标签显示格式
            mChart.getDataAxis().setLabelFormatter(new IFormatterTextCallBack(){@Override
                public String textFormatter(String value) {// TODO Auto-generated method stub
                    Double tmp = Double.parseDouble(value);
                    DecimalFormat df = new DecimalFormat("#0");
                    String label = df.format(tmp).toString();
                    return label+"%";
                }});
            //定义柱形上标签显示格式
            mChart.getBar().setItemLabelVisible(true);
            mChart.getBar().getItemLabelPaint().setColor(Color.rgb(72, 61, 139));
            mChart.getBar().getItemLabelPaint().setFakeBoldText(true);

            mChart.setItemLabelFormatter(new IFormatterDoubleCallBack() {@Override
                public String doubleFormatter(Double value) {// TODO Auto-generated method stub
                    DecimalFormat df=new DecimalFormat("#0");
                    String label = df.format(value).toString();
                    return label+"%";
                }});


            mChart.DeactiveListenItemClick();

        } catch (Exception e) {// TODO Auto-generated catch block
            Log.e(TAG, e.toString());
        }}private void chartDataSet(){//标签对应的柱形数据集
        List<Double> dataSeriesA= new LinkedList<Double>();//一组一类
        dataSeriesA.add(50d);
        dataSeriesA.add(25d);
        dataSeriesA.add(20d);
        BarData BarDataA = new BarData("Google",dataSeriesA,Color.rgb(73, 135, 218));

        List<Double> dataSeriesB= new LinkedList<Double>();
        dataSeriesB.add(35d);
        dataSeriesB.add(65d);
        dataSeriesB.add(75d);
        BarData BarDataB = new BarData("Baidu",dataSeriesB,Color.rgb(224, 4, 0));

        List<Double> dataSeriesC= new LinkedList<Double>();
        dataSeriesC.add(15d);
        dataSeriesC.add(10d);
        dataSeriesC.add(5d);
        BarData BarDataC = new BarData("Bing",dataSeriesC,Color.rgb(255, 185, 0));

        chartData.add(BarDataA);
        chartData.add(BarDataB);
        chartData.add(BarDataC);
    }private void chartLabels(){chartLabels.add("路人甲");
        chartLabels.add("路人乙");
        chartLabels.add("路人丙");
    }@Override
    public void render(Canvas canvas) {try{mChart.setChartRange(0.0f, mOffsetHeight, this.getWidth(),this.getHeight() - mOffsetHeight);


            //mChart.setChartRange(this.getMeasuredWidth(), this.getMeasuredHeight());
            mChart.render(canvas);
        } catch (Exception e){Log.e(TAG, e.toString());
        }}
}

类型

 <string-array name="spinnerbarstyle">
    <item>竖向柱形图</item>   
    <item>横向柱形图</item>        
<item>竖向3D柱形图 </item>
<item>横向3D柱形图</item>
<item>竖向堆积柱形图 </item>
<item>横向堆积柱形图 </item>
</string-array>

layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/white"
    tools:context=".Myzhuxin" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <TextView
                android:id="@+id/tv_label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="huangyihuang"
                />
            <Spinner
                android:id="@+id/spinner1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </LinearLayout>

        <!--    android:layout_width="match_parent"
           android:layout_height="wrap_content"
            -->
        <LinearLayout
            android:id="@+id/lay_chart"
            android:layout_width="500dip"
            android:layout_height="500dip"
            android:orientation="vertical">
        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

java代码

public class Myzhuxin extends Activity {private Spinner mSpinner = null;
    private LinearLayout mLaychart = null;
    private int mSelected = 0;
    private int mMoveHeight = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);
        setContentView(R.layout.myzhuxingtu);
        mLaychart = (LinearLayout) this.findViewById(R.id.lay_chart);
        mSpinner = (Spinner) findViewById(R.id.spinner1);
        mMoveHeight = mSpinner.getHeight();

        String[] mItems = null;
        // 建立数据源
        mItems = getResources().getStringArray(R.array.spinnerbarstyle);


        ArrayAdapter<String> _Adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems);
        mSpinner.setAdapter(_Adapter);
        mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Override
            public void onNothingSelected(AdapterView<?> parent) {// TODO Auto-generated method stub
            }@Override
            public void onItemSelected(AdapterView<?> parent, View view,
                                       int position, long id) {// TODO Auto-generated method stub

                renderChart(position);
            }});


        renderChart(0);
    }private void renderChart(int position) {int width = DensityUtil.dip2px(getApplicationContext(), 300);
        int height = DensityUtil.dip2px(getApplicationContext(), 400);
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(width, height);
        layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);

        mLaychart.removeAllViews();
        SpinnerBarChart01View barChart01 = new SpinnerBarChart01View(this, position, mMoveHeight);
        mLaychart.addView(barChart01, layoutParams);


    }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【mmall】IDEA自动Make

待更新... 转载于:https://www.cnblogs.com/bobi1234/p/7716737.html

谷歌chrome模拟手机浏览网页:iPhone/Android

部分网站通过Http头中的User-Agent判断浏览器类型&#xff0c;如果是手机&#xff0c;显示手机版页面内容&#xff0c;如果是普通PC浏览器&#xff0c;显示电脑版网页内容。 因此谷歌Chrome浏览器&#xff0c;可以通过修改User-Agent和页面分辨率模拟手机浏览器访问网页。如iPh…

js 对象数组常用操作 我用到的

1、删除一个元素 arr.splice(arr.findIndex(v > v.key demokey),1);2、根据某个字段就行排序 function compare(p) { return function (m, n) {const a m[p];const b n[p];return b - a; } } myDeparts.sort(compare("role"));3、在数组开头新增元素 arr.un…

前端学习(2629):npm安装成功配置

修改目录 修改镜像 输入命令npm config set registryhttp://registry.npm.taobao.org 配置镜像站 配置成功 测试镜像行吗

设置WordPress文章关键词自动获取,文章所属分类名称,描述自动获取文章内容,给文章的图片自动加上AlT标签...

最近在优化网站&#xff0c;SEO优化标准&#xff1a;每一篇文章都要有关键词&#xff0c;关键词的个数为3到6个。每一篇文章都要有描述&#xff0c;描述的字数为汉字在70~80之间&#xff0c;在160个字符之间。每一篇文章的图片都要有Alt标签&#xff0c;自动给图片加上Alt标签实…

优化JMeter自身性能

JMeter负载测试时使用GUI界面和较多的收集测试结果的监听器容易造成jmeter的性能瓶颈&#xff0c;远程测试时的控制台尤为明显。提升JMeter负载测试时性能的方法如下&#xff1a; 官方的解决办法&#xff1a; http://jakarta.apache.org/jmeter/usermanual/best-practices.html…

centos 宝塔面板 mongodb 给新的数据库 创建登录用户和密码

之前写过一篇冷环境下mongodb从零开始创建用户密码的文章。 https://blog.csdn.net/solocao/article/details/83347658 当我们需要再新增一个账号时&#xff0c;用下面的方法&#xff0c;和第一篇大同小异&#xff1a; 1、进入mongodb安装目录&#xff0c;下面是宝塔面板的默…

EventBus使用实例,观察者模式

依赖 compile org.greenrobot:eventbus:3.0.0 构造函数方法类(用于传递参数) public class ChangeFragmentEvent {private int viewId;private String ass;public ChangeFragmentEvent(int id,String ss) {this.viewId id;this.assss;}public int getViewId() {return viewId…

前端学习(2630):git安装包下载

下载git时&#xff0c;先进官网看 https://git-scm.com/download/win 然后发现几kb的网速&#xff0c;这是要让我下一年么&#xff0c;找了找网上有没有其他的镜像&#xff0c;发现阿里有一个镜像&#xff0c;下载速度超快。 网址&#xff1a;https://npm.taobao.org/mirror…

coding ssh_exchange_identification: Connection closed by remote host

首先&#xff0c;强力吐槽coding.net。前段时间突然提交不上代码了。老是报错&#xff0c;一怒之下删除.ssh&#xff0c;然后重新根据官方文档配置&#xff0c;我是买的企业版&#xff0c;是付费的。 于是官方文档坑了 https://e.coding.net/help/git/ssh-key/#i-3 感觉这文档…

jmeter模拟http请求/发送gzip数据

jmeter中get请求gzip数据的方法&#xff1a; 在jmeter线程组中添加“http信息头管理器”&#xff0c;并添加名称&#xff1a;Accept-Encoding值: gzip,deflate 注&#xff1a;HTTP信息头Accept-Encoding 是客户端发给服务器,声明客户端支持的编码类型 验证服务器是否返回了gzip…

Java randomString

public static String randomString(int strLength) {Random rnd ThreadLocalRandom.current();StringBuilder ret new StringBuilder();for (int i 0; i < strLength; i) {boolean isChar (rnd.nextInt(2) % 2 0);// 输出字母还是数字if (isChar) { // 字符串int choi…

Service Intent must be explicit

隐性调用需要设置包名 serviceIntent new Intent("ce"); serviceIntent.setPackage("clan.yuanxin.com.myditukaifa");//设置包名 startService(serviceIntent);

前端学习(2631):git安装

git 提交 全部文件 1、git add . git add xx 命令可以将xx文件添加到暂存区&#xff0c;如果有很多改动可以通过get add -A .来一次添加所有改变的文件。注意 -A 选项后面还有一个句点。git add -A 表示添加所有内容&#xff0c;git add . 表示添加新文件和编辑过的文件不包括…

宝塔 windows 2012 配置 ftp 允许 fileZilla 连接

使用fileZilla连接宝塔 windows 2012的ftp遇到了一些坑&#xff0c;下面记录一下步骤。 1、当安装完全新当宝塔 windows 2012后&#xff0c;首先配置ftp 账号&#xff1a; 2、在阿里云上配置安全组规则&#xff0c;开放端口 21 22 80 3306 39000/40000 3、在fileZilla进行配置…

jmeter语言设置

Jmeter启动时通过JVM判断界面显示语言&#xff0c;正常情况可以显示正确的语言&#xff0c;但如果显示错误或者喜欢英文环境&#xff0c;就需要自己通过菜单或者自己配置jmeter.properties设置语言。 jmeter.properties中配置Jmeter界面语言 \apache-jmeter-2.9\bin\jmeter.pro…

带参数的光标

转载于:https://www.cnblogs.com/myfaith-feng/p/7725813.html

如何解决360的导航一直绑定为首页(亲测有效)

1首先360导航后面的属性一定被追加了网址 你删除会显示权限不足 2打开文件目录 从新生成快捷方式u即可 难呀 亲测有效

android.os.BinderProxy cannot be cast to

Android在绑定service的时候出现java.lang.ClassCastException&#xff1a;android.os.BinderProxy cannot be cast to ...异常时&#xff1a;修改manifest文件里边相关服务去掉android:process":remote"。

宝塔面板 windows 2012 mysql 允许远程连接

一开始配置windows 2012 mysql连接的时候&#xff0c;怎么连&#xff0c;都连不上。后台知道需要配置一个参数就OK。 1、找到需要修改文件my.ini的目录 打开my.ini&#xff0c;在[mysqld]下添加skip-grant-tables&#xff0c; 2、关闭MySQL服务并重新开启&#xff0c;远程就…