8. 统计模块(一)之统计

上一节对首页模块进行了综述(可参见 3. 首页模块 进行了解),接下来将从统计模块开始详细介绍:

知识点

  • 掌握“统计”界面的开发,使用第三方圆形菜单

统计

任务综述:
“统计”界面主要展示一个圆形菜单,点击圆形菜单会出现9个学科的菜单,点击任意一个菜单都可以跳转到对应学科的“统计详情”界面。

1. “统计”界面

任务分析:
“统计”界面主要展示一个圆形菜单,点击圆形菜单会出现9个学科的菜单,界面效果如图所示。

任务实施:
(1)创建“统计”界面:fragment_count.xml。

(2)导入界面图片(17个)。

(3)引入第三方酷炫菜单。在“统计”界面中,右下角的圆形菜单通过引入第三方框架实现,在AS中,选择File/New/Import Moudle选项,把第三方库boommenu导入项目中,选中项目,右击选择Open Moudle Settings/Dependencies选项卡/+/Moudle Dependency,把boommenu框架加入主项目,圆形菜单框架详情如图所示。

“统计”界面
圆形菜单框架

(4)放置界面控件。在布局文件中,放置一个BoomMenuButton控件用于显示圆形菜单。

fragment_count.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_share2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/count_bg"
    android:orientation="vertical">
    <com.nightonke.boommenu.BoomMenuButton
        android:id="@+id/bmb"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        app:bmb_highlightedColor="@android:color/holo_blue_dark"
        app:bmb_normalColor="@android:color/holo_blue_light" />
</RelativeLayout>

2. “统计”界面逻辑代码

任务分析:
“统计”界面的右下角展示了一个圆形菜单,点击该菜单会动态地弹出9个学科菜单,点击任意一个学科都可以进入对应学科的“统计详情”界面。

任务实施:
(1)获取界面控件。在fragment包中创建一个CountFragment类继承Fragment类,并在该类中重写onCreateView()方法,用于加载布局文件以及设置菜单的样式。

(2)设置菜单按钮的点击事件。在CountFragment中创建一个addBuilder()方法,用于处理9个学科按钮的点击事件,此处以前两个按钮(Android学科、Java学科)为例。

CountFragment.java

public class CountFragment extends Fragment {
    private BoomMenuButton bmb;

    public CountFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_count, container, false);
        bmb = (BoomMenuButton) view.findViewById(R.id.bmb);
        assert bmb != null;
        //设置点击圆形菜单后显示的多个按钮为圆形且带文本的
        bmb.setButtonEnum(ButtonEnum.TextInsideCircle);
        bmb.setPiecePlaceEnum(PiecePlaceEnum.DOT_9_1); //设置右下角圆形菜单中有9个圆形
        //设置点击右下角圆形菜单后显示的按钮为9个圆形Button
        bmb.setButtonPlaceEnum(ButtonPlaceEnum.SC_9_1);
        for (int i = 0; i < bmb.getPiecePlaceEnum().pieceNumber(); i++) {
            addBuilder();
        }
        return view;
    }

    private void addBuilder() {
        bmb.addBuilder(new TextInsideCircleButton.Builder()
                .normalImageRes(BuilderManager.getImageResource())
                .normalTextRes(BuilderManager.getTextResource())
                .listener(new OnBMClickListener() {
                    @Override
                    public void onBoomButtonClick(int index) {
                        switch (index) {
                            case 0:   //跳转到Android统计详情界面
                                Intent android = new Intent(getActivity(), AndroidCountActivity.class);
                                startActivity(android);
                                break;
                            case 1:   //跳转到Java统计详情界面
                                Intent java = new Intent(getActivity(), JavaCountActivity.class);
                                startActivity(java);
                                break;
                        }
                    }
                }));
    }
}

(3)创建一个BuilderManager类。由于点击圆形菜单会显示9个学科的按钮,这9个按钮的文本与背景图片需要设置统计界面展现的样式,因此需要utils包中创建一个BuilderManager类以实现这些功能。

BuilderManager.java

public class BuilderManager {
    private static int[] imageResources = new int[]{ //9个菜单的随机选择的图片
            R.drawable.bat,
            R.drawable.bear,
            R.drawable.bee,
            R.drawable.butterfly,
            R.drawable.cat,
            R.drawable.deer,
            R.drawable.dolphin,
            R.drawable.eagle,
            R.drawable.horse,
            R.drawable.elephant,
            R.drawable.owl,
            R.drawable.peacock,
            R.drawable.pig,
            R.drawable.rat,
            R.drawable.snake,
            R.drawable.squirrel
    };
    private static int[] textResources = new int[]{ //9个菜单中的文本
            R.string.android,
            R.string.java,
            R.string.python,
            R.string.php,
            R.string.c,
            R.string.ios,
            R.string.fore_end,
            R.string.ui,
            R.string.network
    };
    private static int imageResourceIndex = 0;
    private static int textResourceIndex = 0;
    public static int getImageResource() {
        if (imageResourceIndex >= imageResources.length) imageResourceIndex = 0;
        return imageResources[imageResourceIndex++];
    }
    public static int getTextResource() {
        if (textResourceIndex >= textResources.length) textResourceIndex = 0;
        return textResources[textResourceIndex++];
    }
    private static BuilderManager ourInstance = new BuilderManager();
    public static BuilderManager getInstance() {
        return ourInstance;
    }
    private BuilderManager() {
    }
}

(4)修改strings.xml文件。由于“统计”界面中的9个学科的文本信息量比较多,因此为了方便,可以把这9个文本写在res/values文件夹的strings.xml文件中。

    <string name="android">黑马程序员.Android</string>
    <string name="java">黑马程序员.Java</string>
    <string name="php">黑马程序员.PHP</string>
    <string name="python">黑马程序员.Python</string>
    <string name="c">黑马程序员.C/C++</string>
    <string name="ios">黑马程序员.iOS</string>
    <string name="fore_end">黑马程序员.前端与移动开发</string>
    <string name="ui">黑马程序员.UI设计</string>
    <string name="network">黑马程序员.网络营销</string>

(5)修改底部导航栏。由于点击底部导航栏的“统计”按钮会出现在“统计”界面,因此需要在HomeFragment.java文件的initView()方法中的“HomeFragment homefragment = new HomeFragment;”语句下方添加如下代码:

CountFragment countfragment = new CountFragment();

在“alFragment.add(homeFragment);”语句下方添加如下代码:

alFragment.add(countFragment);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,548评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,497评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,990评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,618评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,618评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,246评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,819评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,725评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,268评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,356评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,488评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,181评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,862评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,331评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,445评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,897评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,500评论 2 359

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,988评论 3 119
  • 内容 抽屉菜单 ListView WebView SwitchButton 按钮 点赞按钮 进度条 TabLayo...
    小狼W阅读 1,614评论 0 10
  • 有没有小伙伴连着wifi一直看朋友圈,群上的小视频,然而手机内存慢慢的堆满了,——“你的内存不足。。。” 现在推荐...
    我笑地球不太圆ORZ阅读 760评论 0 1
  • 真的感觉自己好累 总是要小心翼翼的活着 每天都在跟别人斗智斗勇的 还要总是被人家拿东西威胁着 真的好累...
    Lonely_Alone_阅读 232评论 0 0
  • 还记得每年的大年初一给奶奶拜年,奶奶常常笑呵呵地说:“来了就是年”。今年的大年初一,我也只能对着奶奶的黑白照...
    yingzi_4b17阅读 273评论 0 0