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);