程序员Android开发Android开发经验谈

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

2018-12-12  本文已影响10人  Jennyni1122

上一节对欢迎模块进行了综述(可参见 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);
上一篇 下一篇

猜你喜欢

热点阅读