一、概要分析
通過簡單對系統的概要分析與設計,大緻得出了此系統的架構。首先由普通使用者與系統管理者組成,普通使用者可進行新增賬號、賬号登入、修改密碼、浏覽新聞、使用個人空間簽到兌換圖書等。其次是系統管理者,可以對普通使用者賬号密碼進行操作,如添加使用者賬号、修改使用者密碼、查找使用者密碼、删除使用者賬号,層次分析圖如下所示。
二、詳細設計
1、普通使用者設計分析
1.1、實作功能
(1)使用者賬号密碼注冊 --> 判斷新增賬號是否存在。
(2)使用者賬号密碼登入 --> 判斷使用者登入時輸入賬号是否存在以及輸入密碼是否與新增賬號對應。
(3)使用者修改密碼 --> 判斷賬号是否存在,原密碼是否對應新增賬號時密碼,新密碼是否與原密碼不一緻 。
實作流程圖如下。
1.2、實作效果圖
2、系統管理者設計分析
2.1、實作功能
将使用者新增賬號資訊存入Android studio中自帶的輕型SQLite資料庫中,實作對使用者賬号密碼的增删改查。
(1)對普通使用者賬号進行添加、修改、查詢、删除。
實作流程圖如下。
2.2、實作效果圖
黃底闆塊為一個垂直的ScrollView布局控件,其中包含一個ListView控件,将所有使用者賬号資訊顯示在該空間中。系統管理者可在此界面對使用者賬号資訊進行增删改查。
2.3、部分實作代碼
将ListView控件設定其擴充卡,将使用者資訊資料顯示在該控件中。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin_to_user_page);
UserDao udao=new UserDao(this);
list=udao.querryAll();
listView=(ListView)findViewById(R.id.list_view);
listView.setAdapter(new BaseAdapter() {
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=View.inflate(getBaseContext(),R.layout.listview_sql,null);
TextView txt1=(TextView)view.findViewById(R.id.txt_acc);
TextView txt2=(TextView)view.findViewById(R.id.txt_pwd);
User user=list.get(position);
txt1.setText(user.getAccount());
txt2.setText(user.getPassword());
return view;
}
});
}
3、使用者個人空間設計分析
3.1、實作功能
(1)使用者簽到打卡擷取金币 --> 簽到1天擷取5個金币。
(2)使用者使用金币兌換圖書 --> 使用者可使用金币兌換圖書。
(3)使用者登出 --> 使用自定義對話框提示使用者是否登出。
實作流程圖如下。
3.2、實作效果圖
使用者登入後,進入我的空間界面,可進行簽到打卡等。
3.3、部分實作代碼
3.3.1、自定義對話框提示使用者登出
public void showDialog(){
View view =LayoutInflater.from(this).inflate(R.layout.zidingyi_dialog,null,false);
final AlertDialog alertDialog=new AlertDialog.Builder(this).setView(view).create();
Button btn_yes=view.findViewById(R.id.btn_yes);
Button btn_no=view.findViewById(R.id.btn_no);
TextView txt_title=view.findViewById(R.id.txt_dialogTitle);
txt_title.setText("親愛的"+userAcc);
btn_yes.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(PersonSpace.this,MainActivity.class);
startActivity(intent);
}
});
btn_no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
alertDialog.show();
}
public void TuichuLogin(View view) {
showDialog();
}
4、其他闆塊設計
4.1、新聞界面
該界面由頂層一個菜單欄,一個左右滑動的界面、底部一個導航欄組成。整體在一個垂直的LinearLayout布局中,其中頂層菜單欄在一個水準的LinearLayout布局中,新聞顯示部分使用到了ViewPager布局控件,實作左右滑動界面。每一個小新聞闆塊中使用了垂直、水準線性布局以及ScrollView垂直滾動布局,最後在底部有一個在水準線性布局中的導航欄,實作五大闆塊的自由切換。頁面效果圖如下。
4.1.1、使用ViewPager控件實作界面左右滑動部分代碼
ViewPager viewPager=(ViewPager)findViewById(R.id.viewpager);
LayoutInflater layoutInflater=getLayoutInflater().from(this);
View view1=layoutInflater.inflate(R.layout.fragment_tou_tiao,null);
View view2=layoutInflater.inflate(R.layout.fragment_ke_ji,null);
View view3=layoutInflater.inflate(R.layout.fragment_jun_shi,null);
List<View> views=new ArrayList<View>();
views.add(view1);
views.add(view2);
views.add(view3);
viewPager.setAdapter(new ViewPageAdapter(views));
View view=LayoutInflater.from(this).inflate(R.layout.fragment_tou_tiao,null);
public class ViewPageAdapter extends PagerAdapter{
List<View> mlist=new ArrayList<>();
public ViewPageAdapter(List<View> mlist){
this.mlist=mlist;
}
@Override
public int getCount() {
return mlist.size();
}
@Override
public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
return view==object;
}
@Override
public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
container.removeView(mlist.get(position));
}
@NonNull
@Override
public Object instantiateItem(@NonNull ViewGroup container, int position) {
container.addView(mlist.get(position));
return mlist.get(position);
}
}
4.2、視訊界面
該界面整體在一個SrollView垂直滾動布局中,頂部是一個在水準LinearLayout不同類型視訊的連結清單,一個左右滑動的界面、底部一個導航欄組成。頂部的視訊連結清單在一個水準的LinearLayout布局中,每一個視訊由一個RelativeLayout相對布局、videoView控件、以及一個imageView組成,頁面效果圖如下。
使用者點選底部導航欄不同闆塊圖示,可跳至該闆塊視訊的位置。
注意:将視訊檔案使用VideoView控件插入時,不會顯示視訊的第一幀圖檔,隻有黑色背景。
解決方案:在此提供一種方法可以類似解決問題。将視訊的第一幀圖檔放在imageView控件中置于VideoView控件之上。整體采用RelativeLayout相對布局。當使用者點選圖檔(視訊)後,圖檔隐藏、視訊播放。
4.2.1、部分實作代碼(在此以一個視訊為例)
imageView=(ImageView)findViewById(R.id.imageView4);
videoView=findViewById(R.id.videoView);
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
imageView.setVisibility(View.INVISIBLE);
shipin1();
}
});
private void shipin1(){
String packageName = getPackageName();
videoView.setVideoURI(Uri.parse("android.resource://"+packageName+"/"+R.raw.xidada));
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setLooping(true);
}
});
videoView.setMediaController(new MediaController(this));
videoView.start();
}
此時有些小夥伴可能還會遇到這樣的問題:垂直SrcollView中的控件過多,在啟動APP後發現此界面初始位置在最後或其他地方,沒有置于頂部。
解決方案:(其中一種)
scrollView=(ScrollView)findViewById(R.id.scorllview);
lin_scoll=(LinearLayout)findViewById(R.id.lin_scorll);
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_UP);
}
});
4.3、聯系我們、關于我們闆塊設計(在此不做展示與說明)
至此,本APP的設計與實作大緻流程與效果已講解完畢,如對您有所幫助,請收藏保留并留下寶貴一贊!謝謝!
需源碼 私信扣扣 1351097431