天天看點

Android籃球計分器App

前言:代碼都調試了,基本上沒有問題,如果大家發現bug希望在下方留言,一起學習學習,這項目是上課教的,但是代碼我看了一下感覺不是很簡便,是以改進了一下,主要是上課那個軟體一個按鈕一個事件,覺得有點麻煩,然後軟體的圖示,給大家介紹一個網址,下載下傳位址阿裡巴巴矢量圖示;

一:運作效果

Android籃球計分器App
Android籃球計分器App
Android籃球計分器App

二:布局代碼

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns: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.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.02" />

    <androidx.constraintlayout.widget.Guideline
        android: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.Guideline
        android:id="@+id/guideline3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.16" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="A隊"
        android:textColor="#F44336"
        android:textSize="40sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/textView2"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="B隊"
        android:textColor="#4D00FE"
        android:textSize="40sp"
        app:layout_constraintBottom_toBottomOf="@+id/textView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/textView"
        app:layout_constraintTop_toTopOf="@+id/textView" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.31053352" />

    <TextView
        android:id="@+id/score_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="0"
        android:textColor="#F44336"
        android:textSize="80sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toStartOf="@+id/score_b"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline3" />

    <TextView
        android:id="@+id/score_b"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="0"
        android:textColor="#4D00FE"
        android:textSize="80sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/score_a"
        app:layout_constraintTop_toTopOf="@+id/guideline3" />

    <Button
        android:id="@+id/btna_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#F44336"
        android:text="+1"
        android:textColor="#201F1F"
        app:layout_constraintBottom_toTopOf="@+id/btna_2"
        app:layout_constraintEnd_toStartOf="@+id/btnb_1"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/score_a" />

    <Button
        android:id="@+id/btna_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#F44336"
        android:text="+2"
        app:layout_constraintBottom_toTopOf="@+id/btna_3"
        app:layout_constraintEnd_toStartOf="@+id/btnb_2"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btna_1" />

    <Button
        android:id="@+id/btna_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:background="#F44336"
        android:text="+3"
        app:layout_constraintBottom_toTopOf="@+id/img_cancel"
        app:layout_constraintEnd_toStartOf="@+id/btnb_3"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btna_2" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@+id/guideline5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.8" />

    <Button
        android:id="@+id/btnb_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#4D00FE"
        android:text="+1"
        app:layout_constraintBottom_toTopOf="@+id/btnb_2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btna_1"
        app:layout_constraintTop_toBottomOf="@+id/score_b" />

    <Button
        android:id="@+id/btnb_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#4D00FE"
        android:text="+2"
        app:layout_constraintBottom_toTopOf="@+id/btnb_3"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btna_2"
        app:layout_constraintTop_toBottomOf="@+id/btnb_1" />

    <Button
        android:id="@+id/btnb_3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:background="#4D00FE"
        android:text="+3"
        app:layout_constraintBottom_toTopOf="@+id/img_reset"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/btna_3"
        app:layout_constraintTop_toBottomOf="@+id/btnb_2" />

    <ImageView
        android:id="@+id/img_cancel"
        android:layout_width="134dp"
        android:layout_height="76dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/back"
        app:layout_constraintEnd_toStartOf="@+id/img_reset"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline5" />

    <ImageView
        android:id="@+id/img_reset"
        android:layout_width="134dp"
        android:layout_height="76dp"
        android:layout_marginTop="8dp"
        android:src="@drawable/rsset"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toEndOf="@+id/img_cancel"
        app:layout_constraintTop_toTopOf="@+id/guideline5" />
</androidx.constraintlayout.widget.ConstraintLayout>
           

三:後端代碼

package cn.cg.basketballscorer;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

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;
    private Button btna_1,btna_2,btna_3,btnb_1,btnb_2,btnb_3;
    private ImageView img_cancel,img_rest;
    private TextView test_score_a,test_score_b;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        inintView();
    }

    private void inintView() {
        //擷取按鈕id
        btna_1=findViewById(R.id.btna_1);
        btna_2=findViewById(R.id.btna_2);
        btna_3=findViewById(R.id.btna_3);
        btnb_1=findViewById(R.id.btnb_1);
        btnb_2=findViewById(R.id.btnb_2);
        btnb_3=findViewById(R.id.btnb_3);


        //得分情況和清零
        img_cancel=findViewById(R.id.img_cancel);
        img_rest=findViewById(R.id.img_reset);
        test_score_a=findViewById(R.id.score_a);
        test_score_b=findViewById(R.id.score_b);

        //按鈕實作監聽
        btna_1.setOnClickListener(this);
        btna_2.setOnClickListener(this);
        btna_3.setOnClickListener(this);
        btnb_1.setOnClickListener(this);
        btnb_2.setOnClickListener(this);
        btnb_3.setOnClickListener(this);
        img_rest.setOnClickListener(this);
        img_cancel.setOnClickListener(this);
    }

    //點選事件
    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btna_1:
                scoreAdd(0,scoreArray[0]);
             
                break;
            case R.id.btna_2:
                scoreAdd(0,scoreArray[1]);
                
                break;
            case R.id.btna_3:
                scoreAdd(0,scoreArray[2]);
                
                break;
            case  R.id.btnb_1:
                scoreAdd(1,scoreArray[0]);
                
                break;
            case  R.id.btnb_2:
                scoreAdd(1,scoreArray[1]);
                
                break;
            case  R.id.btnb_3:
                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;
        }
        ShowText();
    }

    //重置功能,彈出提示框
    private void reset() {
        //彈出提示框,提示使用者你是否要重置
        AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("提示")
                .setIcon(R.drawable.pointout)
                .setMessage("你确定要重置分數嗎?")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        score_a=0;
                        score_b=0;
                       ShowText();
                        dialog.dismiss();;
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
          AlertDialog  dialog=builder.create();
          dialog.show();
    }

    //退出軟體,彈出提示框
    @Override
    public void onBackPressed() {
        AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
        builder.setTitle("提示")
                .setIcon(R.drawable.warn)
                .setMessage("你确定要退出?")
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        MainActivity.this.finish();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
        AlertDialog  dialog=builder.create();
        dialog.show();
    }

    //進行加分
    private   void  scoreAdd(int Tage,int score){
        //Tage:   0:a  1:b
        if (Tage==0||Tage==1){
            if (Tage==0){
                //表示a進行加分
                lastScore_b=0;
                lastScore_a=score;
                score_a+=lastScore_a;
            }else if (Tage==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));
    }
}
           

四:項目中使用的圖檔

Android籃球計分器App
Android籃球計分器App
Android籃球計分器App
Android籃球計分器App
Android籃球計分器App