安卓初体验一:做一个简易计分器

安卓初体验一:做一个简易计分器

  • 1.成品图
  • 2.准备:确定开发环境、明确应用功能
    • 2.1开发环境
    • 2.2应用功能
  • 3.界面制作
    • 3.1选择布局
    • 3.2代码编写
  • 4.功能编写
    • 4.1提示信息功能编写
    • 4.2按钮加分代码编写
      • 4.2.1篮球比赛计分页TeamA加分(TeamB同理)
      • 4.2.2乒乓球比赛计分页TeamA(TeamB同理)
    • 4.3重置功能编写
      • 4.3.1篮球比赛计分重置
      • 4.3.2乒乓球比赛计分重置
    • 4.4结算功能编写(篮球比赛计分)
      • 4.4.1篮球比赛结算
      • 4.4.2乒乓球比赛结算
    • 4.5功能补充
  • 5.完成
  • 6.附本人制作成品代码锻接

话不多说,我们来做一个简易的计分器,这个小项目适合初学者,大神路过也可指点一二,不胜感激!

1.成品图

安卓初体验一:做一个简易计分器_第1张图片
安卓初体验一:做一个简易计分器_第2张图片
安卓初体验一:做一个简易计分器_第3张图片
安卓初体验一:做一个简易计分器_第4张图片
安卓初体验一:做一个简易计分器_第5张图片

2.准备:确定开发环境、明确应用功能

2.1开发环境

jdk1.8及以上(java向下兼容特性,只要版本在1.8或以上都可以运行起来示例项目)
Android Studio 3.4.2
minSdkVersion 15
targetSdkVersion 29

2.2应用功能

篮球比赛计分(1、2、3分),需两个队伍独立计分,重置所有得分,结算比赛结果。
乒乓球比赛计分(大分、小分),11球制,如果本局获胜那么获胜方需比对手多两个球及以上并大于等于11球。
例如:11:10不算获胜 11:9前者胜 11:13后者胜。

3.界面制作

这里需要制作三个页面,主页、篮球比赛计分页、乒乓球比赛计分页。

3.1选择布局

采用RelativeLayout和LinearLayout混合布局,灵活嵌套,可以达到我们想要的效果。
主页布局示意图
安卓初体验一:做一个简易计分器_第6张图片
篮球比赛计分页布局示意图
安卓初体验一:做一个简易计分器_第7张图片
乒乓球比赛计分页布局示意图
安卓初体验一:做一个简易计分器_第8张图片
本人编写的示例代码布局比上述嵌套稍稍繁琐一点儿,但大体上是这样的布局

3.2代码编写

此处略过,没有多大难度,可参考文末示例代码

4.功能编写

稍加分析,我们需要三个Activity分别实现主页、篮球比赛计分页、乒乓球比赛计分页。

4.1提示信息功能编写

private void alert(String title, String message) {
     /*
      * 提示信息
      * */
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
     builder.setTitle(title);
     builder.setMessage(message);
     builder.show();
}
 
private void alert(String message) {			//重载,达到默认参数的效果
     /*
      * 提示信息
      * */
     AlertDialog.Builder builder = new AlertDialog.Builder(this);
     builder.setTitle("提示");
     builder.setMessage(message);
     builder.show();
}

4.2按钮加分代码编写

4.2.1篮球比赛计分页TeamA加分(TeamB同理)

public void teamA_AddScore(View view) {
    /*
     * Team A加score分
     * @Param oldScore 原成绩
     * @Param score  要加的成绩
     * */
    TextView teamAScore = (TextView) findViewById(R.id.teamAScore);
    int oldScore = Integer.parseInt(teamAScore.getText().toString());
    int score = Integer.parseInt(view.getTag().toString());			
    //注,这个位置的getTag是为了调用此函数时传参数值
    teamAScore.setText("" + (score + oldScore));
}

4.2.2乒乓球比赛计分页TeamA(TeamB同理)

private boolean judgeWiner(int score1, int score2) {
    /*
     * 判断单局胜负和分数限定
     * */
    if (Math.abs(score1 - score2) <= 1) {
        return false;   //没赢下本局
    } else {
        if (score1 < 11) return false;  //没赢下本局
        else return true;   //前者赢下本局
    }

}

public void teamA_AddScore(View view) {
   /*
    * TeamA加分  大分被动更新
    * */
    TextView teamA_SmallScore = findViewById(R.id.teamA_SmallScore);
    int teamA_smallScore = Integer.parseInt(teamA_SmallScore.getText().toString());

    TextView teamB_SmallScore = findViewById(R.id.teamB_SmallScore);
    int teamB_smallScore = Integer.parseInt(teamB_SmallScore.getText().toString());
    teamA_smallScore++;
    if (judgeWiner(teamA_smallScore, teamB_smallScore)) {
        //team A 赢下本局,大分加一,小分全部置零,弹出本局team A 本局获胜信息
        TextView teamA_BigScore = findViewById(R.id.teamA_BigScore);
        int teamA_bigScore = Integer.parseInt(teamA_BigScore.getText().toString());
        teamA_bigScore++;
        teamA_BigScore.setText("" + teamA_bigScore);

        teamA_SmallScore.setText("0");
        teamB_SmallScore.setText("0");

        alert("本局Team A获胜,大分加一!");
    } else {
        teamA_SmallScore.setText("" + teamA_smallScore);
    }
}

4.3重置功能编写

4.3.1篮球比赛计分重置

public void reset(View view) {
    /*
     * 重置比分
     * */
    TextView teamAScore = (TextView) findViewById(R.id.teamAScore);
    TextView teamBScore = (TextView) findViewById(R.id.teamBScore);
    teamAScore.setText("0");
    teamBScore.setText("0");

    /*
     * 发送提示信息
     * */
    alert("重置成功!");
}

4.3.2乒乓球比赛计分重置

public void reset(View view) {
    /*
     * 重置比分
     * */
    TextView teamA_BigScore = findViewById(R.id.teamA_BigScore);
    TextView teamB_BigScore = findViewById(R.id.teamB_BigScore);
    TextView teamA_SmallScore = findViewById(R.id.teamA_SmallScore);
    TextView teamB_SmallScore = findViewById(R.id.teamB_SmallScore);

    teamA_BigScore.setText("0");
    teamB_BigScore.setText("0");
    teamA_SmallScore.setText("0");
    teamB_SmallScore.setText("0");
    /*
     * 发送提示信息
     * */
    alert("重置成功!");
}

4.4结算功能编写(篮球比赛计分)

4.4.1篮球比赛结算

public void over(View view) {
    /*
    * 结算比赛得分
    * */
    TextView teamAScore = findViewById(R.id.teamAScore);
    TextView teamBScore = findViewById(R.id.teamBScore);

    int teamAscore = Integer.parseInt(teamAScore.getText().toString());
    int teamBscore = Integer.parseInt(teamBScore.getText().toString());

    if(teamAscore == teamBscore)alert("比赛结果","难分伯仲!");
    else if(teamAscore > teamBscore)alert("比赛结果","Team A取得了最后胜利!");
    else alert("比赛结果","Team B取得了最后胜利!");
}

4.4.2乒乓球比赛结算

public void over(View view) {
     /*
       * 结算比赛得分
       * */
	TextView teamA_BigScore = findViewById(R.id.teamA_BigScore);
	TextView teamB_BigScore = findViewById(R.id.teamB_BigScore);
	
	int teamA_bigScore = Integer.parseInt(teamA_BigScore.getText().toString());
	int teamB_bigScore = Integer.parseInt(teamB_BigScore.getText().toString());

	if(teamA_bigScore > teamB_bigScore)alert("比赛结果","Team A取得了最后胜利!");
	else if (teamA_bigScore < teamB_bigScore)alert("比赛结果","Team B取得了最后胜利!");
	else {      //大分相等,比较小分
		TextView teamA_SmallScore = findViewById(R.id.teamA_SmallScore);
		TextView teamB_SmallScore = findViewById(R.id.teamB_SmallScore);
		
		int teamA_smallScore = Integer.parseInt(teamA_SmallScore.getText().toString());
		int teamB_smallScore = Integer.parseInt(teamB_SmallScore.getText().toString());
		
		if(teamA_smallScore == teamB_smallScore) alert("比赛结果","难分伯仲!");
		else if (teamA_smallScore > teamB_smallScore) alert("比赛结果","Team A取得了最后胜利!");
		else alert("比赛结果","Team B取得了最后胜利!");
	}
}

4.5功能补充

如果你想要实现应用开始时弹出软件声明,且只在应用启动时启动有且仅启动一次,可以这样实现
1、先创建一个App.java继承Application,且在AndroidManifest.xml的application标签上加一个属性android:name=".App",这样就自定义了一个Application;
2、在App类中声明一个静态boolean变量,并赋默认值,例:

private static boolean newSession = true;

这个变量将表示是否为第一次进入应用,默认为true;
3、为上述静态变量设置静态的get、set方法;
以上完成的App类内容如下:

public class App extends Application {
   //是否第一次进入MainActivity
   private static boolean newSession = true;

   public static boolean getNewSession(){
       return newSession;
   }

   public static void setNewSession(){
       newSession = false;
   }

}

4、在MainActivity中的onCreate函数中添加

if (App.getNewSession()) {    //第一次访问时弹出
	alert("声明", "声明内容");eq
	App.setNewSession();
}

5、此时声明内容就只会在应用启动时弹出一次,上述用静态方法直接调用是为了保证App对象保持唯一单例。

5.完成

至此,一个简单的计分器就这样完成了,只需稍加修饰,换个图标,就可导出apk装到手机上体验第一次写Android应用的快感了

6.附本人制作成品代码锻接

注:功能内已经导出 计分器.apk 可装到手机内体验,apk文件位置 CourtCounter\app\release
点此去下载 提取码:btk0

你可能感兴趣的:(Android)