zoukankan      html  css  js  c++  java
  • 大二下学期每日总结之第一次个人作业(第三阶段)

    今日主要学习了使用MPAndroid 柱状图以及利用Fragment和ViewPager实现柱状图与折线图的滑动切换:

    1.首先柱状图的使用大体上和折线图一样就是一些样式设定中的细节有差异:对于x轴以及柱顶端显示内容的修改与折线图类似。

     if (listwendate != null && listwendate.size() > 0) {
    
                List<BarEntry> list = new ArrayList<>();
                for (int i = 0; i < listwendate.size(); i++) {
                    list.add(new BarEntry(i, listwendate.get(i).getWendu()));
                    System.out.println(listwendate.get(i).getWendu());//其中两个数字对应的分别是   X轴   Y轴
                }
                BarDataSet barDataSet=new BarDataSet(list,"温度");
                barDataSet.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return ""+listwendate.get(dataSetIndex).getWendu();
                    }
                });
                BarData barData=new BarData(barDataSet);
                map_Barchart.setData(barData);
                map_Barchart.setScaleYEnabled(false);  //禁止y轴缩放
                map_Barchart.getXAxis().setGranularity(1);
                map_Barchart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
                    @Override
                    public String getFormattedValue(float v, AxisBase axisBase) {
                        if (v < listwendate.size()) {
                            String s = String.valueOf(listwendate.get((int) v).getDateandtime());
                            String[] time=s.split(" ");
                            String month = time[0].substring(5, 7);
                            String day = time[0].substring(8,10);
                            return month + "." + day;
                        }
                        return "";
                    }
                });
                map_Barchart.getDescription().setEnabled(false);//隐藏右下角英文
                map_Barchart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);//X轴的位置 默认为上面
                map_Barchart.getAxisRight().setEnabled(false);//隐藏右侧Y轴   默认是左右两侧都有Y轴
                map_Barchart.notifyDataSetChanged();
                map_Barchart.invalidate();

    2.实现滑动切换柱状图与折线图,这是之前学习的Fragmernt与ViewPager的综合利用:

    首先写折线图与柱状图的布局界面:两个基本一样

    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">
    
            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
    
                <Button
                    android:layout_width="350dp"
                    android:layout_height="wrap_content"
                    android:background="@color/teal_200"
                    android:text="折线图"
                    android:textSize="25dp"
                    ></Button>
            </LinearLayout>
    
            <com.github.mikephil.charting.charts.LineChart
                android:id="@+id/map_Linechart"
                android:background="@color/white"
                android:layout_width="match_parent"
                android:layout_height="200dp" />
    
        </LinearLayout>
    
    </RelativeLayout>

    再建立一个LineChartFragmetn继承Fragment:

    实现onCreateView方法与对应的布局界面连接

    接受主页面传来的学号,然后查询数据库,得到图表所需数据:

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view =  inflater.inflate(R.layout.map_line, container, false);
            Bundle bundle = getArguments();
            stuid=bundle.getString("stuid");
            map_Linechart=(LineChart)view.findViewById(R.id.map_Linechart);
            LineMapData();
            return view;
        }
    public void LineMapData(){
            stuDao=new StuDao(getContext());
            liststudate=stuDao.queryData("stuid",stuid);
            stuDate=liststudate.get(0);
            wenDao=new WenDao(getContext());
            listwendate=wenDao.queryDataFor("stuid",stuid);
            wenDate=listwendate.get(0);
            mapLineChart();
        }

    最后生成图表:

    public void mapLineChart(){
            if (listwendate != null && listwendate.size() > 0) {
    
                List<Entry> list = new ArrayList<>();
                for (int i = 0; i < listwendate.size(); i++) {
                    list.add(new Entry(i, listwendate.get(i).getWendu()));
                    System.out.println(listwendate.get(i).getWendu());//其中两个数字对应的分别是   X轴   Y轴
                }
                LineDataSet lineDataSet = new LineDataSet(list, "温度");
                lineDataSet.setValueFormatter(new IValueFormatter() {
                    @Override
                    public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
                        return ""+listwendate.get(dataSetIndex).getWendu();
                    }
                });
                lineDataSet.setColor(getResources().getColor(R.color.teal_200));            //折线颜色
                lineDataSet.setFillColor(getResources().getColor(R.color.teal_200));        //折线以下填充颜色
                lineDataSet.setDrawFilled(true);                                                   //是否填充
                lineDataSet.setFillAlpha(10);                                                      //填充颜色透明度
                lineDataSet.setLineWidth(1f);                                                      //折线宽度
                //是否画折线点上的空心圆  false表示直接画成实心圆
                lineDataSet.setDrawCircleHole(false);
                lineDataSet.setCircleRadius(2);                                                    //圆点的半径
                lineDataSet.setValueTextSize(12);//折线字号
                LineData lineData = new LineData(lineDataSet);
                map_Linechart.setData(lineData);
                map_Linechart.setScaleXEnabled(true);   //支持x轴缩放
                map_Linechart.setScaleYEnabled(false);  //禁止y轴缩
                map_Linechart.getXAxis().setGranularity(1);
                map_Linechart.getXAxis().setValueFormatter(new IAxisValueFormatter() {
                    @Override
                    public String getFormattedValue(float v, AxisBase axisBase) {
                        if (v < listwendate.size()) {
                            String s = String.valueOf(listwendate.get((int) v).getDateandtime());
                            String[] time=s.split(" ");
                            String month = time[0].substring(5, 7);
                            String day = time[0].substring(8,10);
                            return month + "." + day;
                        }
                        return "";
                    }
                });
                map_Linechart.getDescription().setEnabled(false);                   //隐藏文字介绍
                map_Linechart.getXAxis().setPosition(XAxis.XAxisPosition.BOTTOM);   //X轴所在位置   默认为上面
                map_Linechart.getLegend().setEnabled(false);                        //隐藏图例
                map_Linechart.getAxisRight().setEnabled(false);                     //隐藏右边的y轴
    
                //数据更新
                map_Linechart.notifyDataSetChanged();
                map_Linechart.invalidate();
                map_Linechart.animateY(500); //折线在Y轴的动画  参数是动画执行时间 毫秒为单位
            }
        }

    主页面要解决传值问题:利用bundle

     Bundle bundle = new Bundle();
            bundle.putString("stuid",map_stuid.getText().toString());
            lineChartFragment.setArguments(bundle);
            barChartFragment.setArguments(bundle);

    接着就是将Fragment加入到ViewPager中:

     vpager_one = (ViewPager) findViewById(R.id.map_show);
            aList = new ArrayList<Fragment>();
            aList.add(lineChartFragment);
            aList.add(barChartFragment);
            mAdapter = new PagerLIneAdapter(getSupportFragmentManager(),aList);
            vpager_one.setAdapter(mAdapter);
    public class PagerLIneAdapter extends FragmentPagerAdapter {
        private List<Fragment> viewLists;
        public PagerLIneAdapter(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
            super(fm);
            this.viewLists = fragmentList;
        }
        @NonNull
        @Override
        public Fragment getItem(int position) {
            return viewLists.get(position);
        }
    
        @Override
        public int getCount() {
            return viewLists.size();
        }
    }
  • 相关阅读:
    apache安全—用户访问控制
    hdu 3232 Crossing Rivers 过河(数学期望)
    HDU 5418 Victor and World (可重复走的TSP问题,状压dp)
    UVA 11020 Efficient Solutions (BST,Splay树)
    UVA 11922 Permutation Transformer (Splay树)
    HYSBZ 1208 宠物收养所 (Splay树)
    HYSBZ 1503 郁闷的出纳员 (Splay树)
    HDU 5416 CRB and Tree (技巧)
    HDU 5414 CRB and String (字符串,模拟)
    HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
  • 原文地址:https://www.cnblogs.com/fengchuiguobanxia/p/14514234.html
Copyright © 2011-2022 走看看