• 目录

    开发寄语

    开发功能

    开发环境

    程序流程图

    实现步骤

    将活动所需要的图片文件(.jpg或.png)统一保存在drawable文件夹

    主活动的布局文件activity_fore.xml

    主活动的java文件ForeActivity.java

    第二个活动的布局文件activity_main.xml

    第二个活动的菜单文件main.xml

    第二个活动的java文件MainActivity.java

    关于res/drawable的图片资源下载地址说明

    如何将项目app传到手机

    (1)生成APK安装包

    (2)打开APK安装包保存地址

    (3)将安装包放入自命名的文件夹里,拉到手机,在手机文件资源处进行查看并安装

    APP效果图


  • 开发寄语

本人出于情怀,恰巧与课程设计撞了个满怀,兴趣上头,开发了一款简单实用、便捷舒服的多功能篮球计分APP,以此来纪念我大学三年的篮球生涯以及队友。希望多年来我们还可以凑在一起,打打篮球、谈谈人生,或者带着我们的孩子,一起在篮球场上组个队。在此,我致敬所有热爱篮球并追逐梦想的人。

  • 开发功能

实现一款简单、便捷、实用的多功能篮球计分器,其中包括篮球计分、比赛日程、天气预报、热门比赛、主题切换等功能。

  • 开发环境

平台:Android studio

SDK:Android Platform 32

Virtual device:Nexus 5 API 32

  • 程序流程图

活动跳转图(图1)

MainActivity框架图(图2)

  • 实现步骤

  • 将活动所需要的图片文件(.jpg或.png)统一保存在drawable文件夹

  • 主活动的布局文件activity_fore.xml

此处采用约束布局,定义6个Guideline控件、1个ImageView控件、2个EditText控件、2个Button控件。实现代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ForeActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.02" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.45" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.55" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.65" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.8" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline6"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.95" /><ImageViewandroid:id="@+id/iot"android:layout_width="366dp"android:layout_height="249dp"android:src="@drawable/iot"app:layout_constraintBottom_toTopOf="@+id/guideline2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline1"app:layout_constraintVertical_bias="0.545" /><EditTextandroid:id="@+id/edit_text1"android:layout_width="264dp"android:layout_height="47dp"android:hint="请输入主队队名:"android:textColor="#000000"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/edit_text2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.503"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline2"app:layout_constraintVertical_bias="0.309" /><EditTextandroid:id="@+id/edit_text2"android:layout_width="264dp"android:layout_height="47dp"android:layout_marginBottom="12dp"android:hint="请输入客队队名:"android:textColor="#000000"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline4"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent" /><Buttonandroid:id="@+id/start"android:layout_width="149dp"android:layout_height="67dp"android:backgroundTint="@color/teal_200"android:text="开始比赛"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline5"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline4" /><Buttonandroid:id="@+id/schedule"android:layout_width="149dp"android:layout_height="67dp"android:backgroundTint="@color/teal_200"android:text="比赛日程"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/guideline6"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline5" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 主活动的java文件ForeActivity.java

此处使用接口的方式注册监听器,监听“开始比赛”或“比赛日程”两个按钮是否被点击,从而执行相关程序 -> start()、schedule()。

start()使用Intent传递队名等数据信息到第二个活动MainActivity.java,同时进行页面跳转,来到篮球计分界面。

schedule()使用Intent跳转到第三个活动LastActivity,来到日程安排表,进行球赛日程及球员信息记录。实现代码如下:

package com.example.basketball_scorer;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class ForeActivity extends AppCompatActivity implements View.OnClickListener {private Button start, schedule;private EditText edit_text1, edit_text2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_fore);inintView();}private void inintView() {//获取按钮idstart=findViewById(R.id.start);schedule=findViewById(R.id.schedule);//获取队名idedit_text1=findViewById(R.id.edit_text1);edit_text2=findViewById(R.id.edit_text2);//按钮实现监听start.setOnClickListener(this);schedule.setOnClickListener(this);edit_text1.setOnClickListener(this);edit_text2.setOnClickListener(this);}public void onClick(View v) {switch (v.getId()){case R.id.start:start();break;case R.id.schedule:Toast.makeText(ForeActivity.this, "暂无最新比赛日程", Toast.LENGTH_SHORT).show();break;default:break;}}private void start() {//判断edit_text1、edit_text2是否填写String inputText1 = edit_text1.getText().toString();if(TextUtils.isEmpty(inputText1)) {Toast.makeText(ForeActivity.this, "请输入主队队名!!!", Toast.LENGTH_SHORT).show();return;}String inputText2 = edit_text2.getText().toString();if(TextUtils.isEmpty(inputText2)) {Toast.makeText(ForeActivity.this, "请输入客队队名!!!", Toast.LENGTH_SHORT).show();return;}//使用Intent传递数据信息Intent intent = new Intent(ForeActivity.this, MainActivity.class);intent.putExtra("edit_text1",inputText1);intent.putExtra("edit_text2",inputText2);//启动startActivity(intent);}//schedule函数,实现日程表功能private void schedule() {}//退出应用,弹出提示框@Overridepublic void onBackPressed() {//弹出提示框,提示用户你是否要退出AlertDialog.Builder builder=new AlertDialog.Builder(ForeActivity.this);builder.setTitle("提示");builder.setIcon(R.drawable.warning);builder.setMessage("你确定退出应用吗?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {ForeActivity.this.finish();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});AlertDialog dialog = builder.create();dialog.show();}
}
  • 第二个活动的布局文件activity_main.xml

此处采用约束布局,定义5个Guideline控件、2个ImageView控件、5个TextView控件、6个Button控件。实现代码如下:

<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.02" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintGuide_percent="0.5" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="91dp" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline4"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_begin="233dp" /><androidx.constraintlayout.widget.Guidelineandroid:id="@+id/guideline5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"app:layout_constraintGuide_percent="0.77" /><TextViewandroid:id="@+id/textView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="16dp"android:text="@string/master_name"android:textColor="#E91E63"android:textSize="40sp"android:textStyle="bold"android:translationZ="1dp"app:layout_constraintEnd_toStartOf="@+id/textView2"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline1" /><TextViewandroid:id="@+id/textView2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="@string/guest_name"android:textColor="#00BCD4"android:textSize="40sp"android:textStyle="bold"android:translationZ="1dp"app:layout_constraintBottom_toBottomOf="@+id/textView1"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/textView1"app:layout_constraintTop_toTopOf="@+id/textView1"app:layout_constraintVertical_bias="1.0" /><TextViewandroid:id="@+id/score_a"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="0"android:textColor="#E91E63"android:textSize="80sp"android:textStyle="bold"android:translationZ="1dp"app:layout_constraintEnd_toStartOf="@+id/score_b"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline3" /><TextViewandroid:id="@+id/score_b"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="8dp"android:text="0"android:textColor="#00BCD4"android:textSize="80sp"android:textStyle="bold"android:translationZ="1dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/score_a"app:layout_constraintTop_toTopOf="@+id/guideline3" /><Buttonandroid:id="@+id/add_a1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#ED047D"android:text="+1"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/add_a2"app:layout_constraintEnd_toStartOf="@+id/add_b1"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/score_a" /><Buttonandroid:id="@+id/add_a2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#ED047D"android:text="+2"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/add_a3"app:layout_constraintEnd_toStartOf="@+id/add_b2"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/add_a1" /><Buttonandroid:id="@+id/add_a3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:backgroundTint="#ED047D"android:text="+3"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/img_cancel"app:layout_constraintEnd_toStartOf="@+id/add_b3"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/add_a2" /><Buttonandroid:id="@+id/add_b1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#00BCD4"android:text="+1"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/add_b2"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/add_a1"app:layout_constraintTop_toBottomOf="@+id/score_b" /><Buttonandroid:id="@+id/add_b2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:backgroundTint="#00BCD4"android:text="+2"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/add_b3"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/add_a2"app:layout_constraintTop_toBottomOf="@+id/add_b1" /><Buttonandroid:id="@+id/add_b3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="8dp"android:backgroundTint="#00BCD4"android:text="+3"android:textSize="25sp"android:textStyle="bold"app:layout_constraintBottom_toTopOf="@+id/img_reset"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/add_a3"app:layout_constraintTop_toBottomOf="@+id/add_b2" /><ImageViewandroid:id="@+id/img_cancel"android:layout_width="110dp"android:layout_height="65dp"android:layout_marginTop="16dp"android:src="@drawable/cancel"android:translationZ="1dp"app:layout_constraintEnd_toStartOf="@+id/img_reset"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/guideline5" /><ImageViewandroid:id="@+id/img_reset"android:layout_width="110dp"android:layout_height="65dp"android:layout_marginTop="16dp"android:src="@drawable/reset"android:translationZ="1dp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"app:layout_constraintStart_toEndOf="@+id/img_cancel"app:layout_constraintTop_toTopOf="@+id/guideline5" /><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@color/white"tools:layout_editor_absoluteX="0dp"tools:layout_editor_absoluteY="0dp" /></androidx.constraintlayout.widget.ConstraintLayout>
  • 第二个活动的菜单文件main.xml

此处设置一、二级菜单,减少屏幕控件占比,整洁干净。实现代码如下:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/item_1"android:title="热门比赛"/><item android:id="@+id/item_2"android:title="天气预报"/><item android:id="@+id/item_3"android:title="主题壁纸"><menu><itemandroid:id="@+id/original"android:title="默认主题"/><itemandroid:id="@+id/warriors"android:title="勇士主场"/><itemandroid:id="@+id/lakers"android:title="湖人主场"/><itemandroid:id="@+id/hawks"android:title="老鹰主场"/><itemandroid:id="@+id/dallas"android:title="小牛主场"/><itemandroid:id="@+id/nets"android:title="篮网主场"/><itemandroid:id="@+id/sixers"android:title="76人主场"/><itemandroid:id="@+id/nuggets"android:title="掘金主场"/><itemandroid:id="@+id/cavaliers"android:title="骑士主场"/><itemandroid:id="@+id/celtics"android:title="绿军主场"/><itemandroid:id="@+id/hornets"android:title="黄蜂主场"/></menu></item><item android:id="@+id/item_4"android:title="更多服务"/>
</menu>
  • 第二个活动的java文件MainActivity.java

此处使用接口的方式注册监听器,监听各类型的控件,实现分数加1、分数加2、分数加3、分数撤回、分数置0等功能;调用onOptionsItemSelected(MenuItem item) 方法,处理一、二级菜单的点击事件;调用Intent方法,跳转到热门比赛、天气预报等网站。

实现代码如下:

package com.example.basketball_scorer;import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity implements View.OnClickListener {//定义数组存放加分private  final  int scoreArray[]={1,2,3};private  int lastScore_a,lastScore_b,score_a,score_b;
// lastScore:上一次加的分数  score:总分数private Button add_a1,add_a2,add_a3,add_b1,add_b2,add_b3;private ImageView img_cancel,img_reset;private TextView tv,master_name,guest_name,test_score_a,test_score_b;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Intent intent = getIntent();String inputText1 = intent.getStringExtra("edit_text1");String inputText2 = intent.getStringExtra("edit_text2");inintView();master_name.setText(inputText1);guest_name.setText(inputText2);}private void inintView() {//获取按钮idadd_a1=findViewById(R.id.add_a1);add_a2=findViewById(R.id.add_a2);add_a3=findViewById(R.id.add_a3);add_b1=findViewById(R.id.add_b1);add_b2=findViewById(R.id.add_b2);add_b3=findViewById(R.id.add_b3);//得分情况和清零img_cancel=findViewById(R.id.img_cancel);img_reset=findViewById(R.id.img_reset);tv=findViewById(R.id.textView);master_name=findViewById(R.id.textView1);guest_name=findViewById(R.id.textView2);test_score_a=findViewById(R.id.score_a);test_score_b=findViewById(R.id.score_b);//按钮实现监听add_a1.setOnClickListener(this);add_a2.setOnClickListener(this);add_a3.setOnClickListener(this);add_b1.setOnClickListener(this);add_b2.setOnClickListener(this);add_b3.setOnClickListener(this);img_reset.setOnClickListener(this);img_cancel.setOnClickListener(this);}//菜单栏public boolean onCreateOptionsMenu(Menu menu){getMenuInflater().inflate(R.menu.main,menu);return true;}//处理菜单点击事件public boolean onOptionsItemSelected(MenuItem item) {switch(item.getItemId()){case R.id.item_1:Intent intent1 = new Intent(Intent.ACTION_VIEW);intent1.setData(Uri.parse("https://xw.qq.com/m/nba/vs"));startActivity(intent1);Toast.makeText(MainActivity.this, "1", Toast.LENGTH_SHORT).show();break;case R.id.item_2:Intent intent2 = new Intent(Intent.ACTION_VIEW);intent2.setData(Uri.parse("https://m.tianqi.com/"));startActivity(intent2);Toast.makeText(MainActivity.this, "2", Toast.LENGTH_SHORT).show();break;case R.id.item_3:Toast.makeText(MainActivity.this, "请选择你喜爱的主题", Toast.LENGTH_SHORT).show();break;case R.id.item_4:Toast.makeText(MainActivity.this, "更多服务请等待进一步完善", Toast.LENGTH_SHORT).show();break;case R.id.original:tv.setBackgroundResource(R.drawable.original);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.warriors:tv.setBackgroundResource(R.drawable.warriors);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.lakers:tv.setBackgroundResource(R.drawable.lakers);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.hawks:tv.setBackgroundResource(R.drawable.hawks);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.dallas:tv.setBackgroundResource(R.drawable.dallas);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.nets:tv.setBackgroundResource(R.drawable.nets);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.sixers:tv.setBackgroundResource(R.drawable.sixers);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.nuggets:tv.setBackgroundResource(R.drawable.nuggets);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.cavaliers:tv.setBackgroundResource(R.drawable.cavaliers);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.celtics:tv.setBackgroundResource(R.drawable.celtics);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;case R.id.hornets:tv.setBackgroundResource(R.drawable.hornets);Toast.makeText(MainActivity.this, "主题已更改", Toast.LENGTH_SHORT).show();break;default:}return super.onOptionsItemSelected(item);}//点击事件public void onClick(View v) {switch (v.getId()){case R.id.add_a1:scoreAdd(0,scoreArray[0]);break;case R.id.add_a2:scoreAdd(0,scoreArray[1]);break;case R.id.add_a3:scoreAdd(0,scoreArray[2]);break;case  R.id.add_b1:scoreAdd(1,scoreArray[0]);break;case  R.id.add_b2:scoreAdd(1,scoreArray[1]);break;case  R.id.add_b3:scoreAdd(1,scoreArray[2]);break;case  R.id.img_reset:reset();break;case  R.id.img_cancel:cancel();break;default:break;}}//取消上次加分操作private void cancel() {if (score_a != 0 && score_a-lastScore_a >= 0){score_a -= lastScore_a;}if (score_b != 0 && score_b-lastScore_b >= 0){score_b -= lastScore_b;}Toast.makeText(MainActivity.this, "已取消上次加分操作", Toast.LENGTH_SHORT).show();ShowText();}//重置功能,弹出提示框private void reset() {//弹出提示框,提示用户你是否要重置AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("提示");builder.setIcon(R.drawable.warning);builder.setMessage("你确定要重置分数吗?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {score_a=0;score_b=0;ShowText();dialog.dismiss();Toast.makeText(MainActivity.this, "分数已重置", Toast.LENGTH_SHORT).show();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});AlertDialog dialog = builder.create();dialog.show();}//返回上一层,弹出提示框@Overridepublic void onBackPressed() {//弹出提示框,提示用户你是否要退出AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);builder.setTitle("提示");builder.setIcon(R.drawable.warning);builder.setMessage("你确定要返回上一层?");builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {MainActivity.this.finish();}});builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});AlertDialog dialog = builder.create();dialog.show();}//进行加分private void scoreAdd(int flag, int score){//Tage:   0:a  1:bif (flag == 0 || flag == 1){if (flag == 0){//表示a进行加分lastScore_b = 0;lastScore_a = score;score_a += lastScore_a;}else if (flag == 1){//表示对b进行加分lastScore_a = 0;lastScore_b = score;score_b += lastScore_b;}ShowText();}}//进行显示private void ShowText(){test_score_a.setText(Integer.toString(score_a));test_score_b.setText(Integer.toString(score_b));}
}
  • 关于res/drawable的图片资源下载地址说明

App 图标:阿里巴巴矢量图标

主题图片:百度搜索nba球队地板图

图片设计:canvas官网

  • 如何将项目app传到手机

(1)生成APK安装包

(2)打开APK安装包保存地址

(3)将安装包放入自命名的文件夹里,拉到手机,在手机文件资源处进行查看并安装

  • APP效果图

《物联篮球计分器》Android应用程序开发-期末课程设计相关推荐

  1. Android应用程序开发期末大作业(1)

    一.简答题 (每小题5分,4小题,共20分) 1.(1) android大众常用的五种布局(5分) 答:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLa ...

  2. android应用程序开发_Kotlin与Flutter:Android跨平台应用程序开发,到底选择哪个?...

    移动互联时代--应用为王 移动互联网时代,很难想象没有应用程序的生活.从我们睁眼醒来的那一刻到我们真正睡觉的那一刻,无数的应用程序围绕着我们.根据统计,国人平均在移动设备上花费4个小时以上! 而这其中 ...

  3. 安卓应用程序一般采用什么计算机语言开发,Kotlin 编程语言成为其 Android 应用程序开发人员的首选语言...

    本年5月,谷歌在I/O大会上宣告,Kotlin编程言语成为其Android使用程序开发人员的首选言语. Kotlin是一种面向现代多平台使用程序的编程言语,成为谷歌开发Android使用程序的首选言语 ...

  4. Android应用程序开发环境的建立

    注: 本片文章简单的描述一下Android应用程序开发环境的建立.如果有不正确或者不完善的地方,欢迎前来拍砖留言或者发邮件到guopeixin@126.com进行讨论,先行谢过. 一.准备工作... ...

  5. Android应用程序开发——创建应用程序

    建立你的第一个应用程序 欢迎来到Android应用程序开发教程! 本教程将教你如何建立你的第一个Android 应用程序.你会学习如何创建一个Android项目,如何运行可调试的应用程序.还会学习到A ...

  6. Java:Java vs Kotlin–Android应用程序开发的最佳语言?

    在移动应用技术领域,Java和Kotlin是最流行的搜索词之一.如果你也在寻找Java与Kotlin框架的比较,那么这篇文章就是为你准备的! 让我们来全面了解一下这两种技术之间的区别. 编程语言的定义 ...

  7. 从零开始的Android:Android应用程序开发概述

    介绍 截至2016年初,有十亿多人积极使用Android , Android是一种类似于Unix的移动操作系统,可在手机,平板电脑,智能电视,智能手表和许多其他设备上运行. 尽管它是由Google开发 ...

  8. 艾玛迪斯咨询讨论Android应用程序开发的QA测试和碎片

    艾玛迪斯咨询讨论Android应用程序开发的QA测试和碎片 的一大挑战,开发Android?应用程序是目前市场上Android设备的数量.事实上,随着近100独特的Andr​​oid设备提供有质量保证 ...

  9. Android应用程序开发以及背后的设计思想深度剖析(4)

    特别声明:本系列文章LiAnLab.org著作权所有,转载请注明出处.作者系LiAnLab.org资深Android技术顾问吴赫老师.本系列文章交流与讨论:@宋宝华Barry 紧接连载三,我们接下从性 ...

  10. 【241期门诊集锦】正确高效的Android应用程序开发

    技术门诊是51CTO社区品牌栏目,每周邀请一位客座专家,为广大技术网友解答疑问.从热门技术到前沿知识,从技术答疑到职业规划.每期一个主题,站在最新最热的技术前沿为你引航! 本期特邀<Androi ...

最新文章

  1. Kafka 基本原理(8000 字小结)
  2. 面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序
  3. BUILD 2015: Visual Studio对GitHub的支持
  4. html5shiv.js和respond.min.js的作用
  5. php mysql全能权威指南 pdf_《PHP+MySQL全能权威指南(配光盘)》怎么样_目录_pdf在线阅读 - 课课家教育...
  6. springboot整合shiro和session的详细过程和自定义登录拦截器
  7. Yarn申请的内存的精确计算(转载+应用到自己的情况中)
  8. mysql命令行导入和导出数据
  9. 【实用工具】之移除PDF的密码PDF Password Remover 3.0 汉化版
  10. python编程入门第3版pdf-Python编程入门第三版
  11. zoj2587唯一最小割
  12. mysql使用join和不使用join_在SQL或MySQL中不使用JOIN关键字的联接有问题吗?
  13. 计算机同S7-300PLC通讯,西门子S7-300 PLC与Intouch的通讯连接方法
  14. adb shell dumpsys activity top
  15. java sqlite sqlite_busy_sqlite3 busy timeout
  16. Linux find 命令
  17. java对接苹果支付
  18. JPA、EJB、事物管理、WebSphere ---相关内容整理
  19. PostgreSQL的集群化和容器化部署
  20. 香港HongKong之旅

热门文章

  1. 自媒体内容采集工具,采集多个自媒体平台内容
  2. 计算机汉字区位码十进制,[计 算 机]汉字区位码\国标码\机内码之间的换算
  3. “一键淘宝”将淘宝网店免费转移到手机客户端android教程
  4. nrf52840 内部 flash 结构
  5. python 常用快捷键
  6. keil中L6002U的error原因之一
  7. 制作app怎么连接服务器,App制作步骤、流程有哪些?
  8. Android studio 制作一个app实现简单功能
  9. android论文前言,安卓论文大纲格式范文 安卓论文提纲怎么写
  10. Base64编码原理分析