目录
1.前言
“一壶浊酒喜相逢,古今多少事,都付笑谈中。”
假期空闲之际,把三国志11又玩了一番,看见游戏里面的头像形象生动,于是用android写了一个app,以此纪念曾经废寝忘食玩游戏的岁月,呵呵🙂。
2.开发环境
- 操作系统:Win10 64位
- 开发工具:Android Studio 2020.3
- 开发语言:java
- 数据库:sqlite3
3.表格界面
技术分析:
表格实现基于RecyclerView和GridLayoutManager
GridLayoutManager layoutManager = new GridLayoutManager(MainActivity.this,5);
((RecyclerView)recyclerView).setLayoutManager(layoutManager);
sideBar.setVisibility(View.GONE);
4.列表界面
技术分析:
- 列表实现,基于RecyclerView和LinearLayoutManager
- 人物名字排序,基于第三方库HanziToPinyin获取中文的首字母
- 右侧字母滚动条:基于第三方库AZSideBar
LinearLayoutManager layoutManager = new LinearLayoutManager(MainActivity.this);
((RecyclerView)recyclerView).setLayoutManager(layoutManager);
sideBar.setVisibility(View.VISIBLE);
private void initSlideView() {
lettes = new ArrayMap<>();
tv_hint = (TextView) findViewById(R.id.tv_hint);
sideBar = (AZSideBar) findViewById(R.id.sideBar);
sideBar.setVisibility(View.INVISIBLE);
sideBar.setOnTouchingLetterChangedListener(new OnChooseLetterChangedListener() {
@Override
public void onChooseLetter(String s) {
if (!tv_hint.isShown())
tv_hint.setVisibility(View.VISIBLE);
tv_hint.setText(s);
selectRecyclerView(s);
}
@Override
public void onNoChooseLetter() {
tv_hint.setVisibility(View.GONE);
}
});
}
5.查找界面
技术分析:
- 搜索框,基于SearchView控件实现的
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
final MenuItem item = menu.findItem(R.id.action_search);
mSearchView = (SearchView) MenuItemCompat.getActionView(item);
//搜索框展开时后面叉叉按钮的点击事件
mSearchView.setOnCloseListener(new SearchView.OnCloseListener() {
@Override
public boolean onClose() {
Log.e("mSearchView", "onClose");
FruitFactory.doSearch("");
setupRecyclerView((RecyclerView) recyclerView);
return false;
}
});
//搜索图标按钮(打开搜索框的按钮)的点击事件
mSearchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.e("mSearchView", "onClick");
}
});
//搜索框文字变化监听
mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
Log.e("mSearchView", "TextSubmit : " + s);
FruitFactory.doSearch(s);
setupRecyclerView((RecyclerView) recyclerView);
return false;
}
@Override
public boolean onQueryTextChange(String s) {
Log.e("mSearchView", "TextChange --> " + s);
return false;
}
});
return true;
}
6.人物详细界面
7.快捷菜单界面
8.势力情报界面
public class TableActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.table_main);
Intent getIntent = getIntent();
String type = getIntent.getStringExtra("type");
setTitle(getText(R.string.app_title) + " - " + type);
//设置表格标题的背景颜色
ViewGroup tableTitle = (ViewGroup) findViewById(R.id.table_title);
tableTitle.setBackgroundColor(Color.rgb(220, 220, 220));
traverseViewGroup(tableTitle);
TextView tv2 = (TextView)tableTitle.findViewById(R.id.text_goods_name);
TextView tv3 = (TextView)tableTitle.findViewById(R.id.text_codeBar);
TextView tv4 = (TextView)tableTitle.findViewById(R.id.text_num);
TextView tv5 = (TextView)tableTitle.findViewById(R.id.text_curPrice);
TextView tv6 = (TextView)tableTitle.findViewById(R.id.text_money);
TextView tv7 = (TextView)tableTitle.findViewById(R.id.text_more);
TableAdapter adapter = null;
ListView tableListView = (ListView) findViewById(R.id.list);
if(type.equals("城市"))
adapter = new TableAdapter(this, FruitFactory.PAGE_CITY);
else if(type.equals("官爵")) {
adapter = new TableAdapter(this, FruitFactory.PAGE_GUANZHI);
tv2.setText("名称");
tv3.setText("统帅");
tv4.setText("武力");
tv5.setText("智力");
tv6.setText("政治");
tv7.setText("位階");
tv7.setVisibility(View.VISIBLE);
}
else if(type.equals("宝物")) {
adapter = new TableAdapter(this, FruitFactory.PAGE_BAOWU);
tv2.setText("名称");
tv3.setText("武将");
tv4.setText("价值");
tv5.setText("种类");
tv6.setVisibility(View.GONE);
}
else if(type.equals("部落")) {
adapter = new TableAdapter(this, FruitFactory.PAGE_BULUO);
tv2.setText("名称");
tv3.setText("農業");
tv4.setText("商業");
tv5.setText("兵科");
tv6.setText("士氣");
tv7.setText("指揮");
tv7.setVisibility(View.VISIBLE);
}
else if(type.equals("战法")) {
adapter = new TableAdapter(this, FruitFactory.PAGE_ZHANFA);
tv2.setText("名称");
tv3.setText("指揮");
tv4.setText("攻擊");
tv5.setText("防禦");
tv6.setText("機動");
tv7.setText("士氣");
tv7.setVisibility(View.VISIBLE);
}
else return;
tableListView.setAdapter(adapter);
}
9.地图界面
技术分析:
- Gson读取json文件。
- Glide读取图片。
- 动态批量添加控件TextView和PhotoView。
10.参数设置界面
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<com.fxyublib.android.FxAppSangoKoei.MyPreferenceCategory
android:key="prefCategory1"
android:title="字体" >
<ListPreference
android:key="prefList_fontName"
android:title="字体名称"
android:entries="@array/fonts"
android:entryValues="@array/fonts_value"
android:dialogTitle="字体名称"
android:defaultValue="SentyTEA.ttf"
android:summary="新蒂下午茶体" />
<!-- android:layout="@layout/layout_preffontsize" -->
<ListPreference
android:key="prefList_fontSize"
android:title="字体大小"
android:entries="@array/fonts2"
android:entryValues="@array/fonts2_value"
android:dialogTitle="字体大小"
android:defaultValue="15"
android:summary="中" />
</com.fxyublib.android.FxAppSangoKoei.MyPreferenceCategory>
<com.fxyublib.android.FxAppSangoKoei.MyPreferenceCategory
android:key="prefCategory2"
android:title="常规">
<MultiSelectListPreference
android:key="prefList_pageSet"
android:title="势力情报数据菜单"
android:entries="@array/detailpage"
android:entryValues="@array/detailpage_value"
android:defaultValue="@array/detailpage_value"
android:summary="选择需要显示和隐藏的数据子菜单" />
</com.fxyublib.android.FxAppSangoKoei.MyPreferenceCategory>
</PreferenceScreen>
后续
如果你觉得该方法或代码有一点点用处,可以给作者点个赞;╮( ̄▽ ̄)╭
如果你感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进。o_O???
谢谢各位童鞋们啦( ´ ▽ ` )ノ ( ´ ▽ ` )っ!!!