📌  相关文章
📜  如何在Android中构建Spin Bottle游戏应用程序?

📅  最后修改于: 2021-05-08 19:52:37             🧑  作者: Mango

在本文中,我们将使用Android中的Java和XML构建“旋转瓶子游戏”项目。该应用程序基于多人游戏。一个玩家旋转瓶子,瓶子旋转的方向将确定被选中执行某项任务或其他任何东西的玩家。此应用程序中只有一个活动。下面给出了一个示例GIF,以了解我们将在本文中做些什么

旋转瓶子游戏Android应用示例GIF

分步实施

步骤1:创建一个新项目

要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。

第2步:首先进入编码部分,您必须做一些准备工作

  • 添加瓶子图像:转到应用程序-> res-> drawable并添加该瓶子图像
  • 修改colors.xml文件:
XML


    #6200EE
    #3700B3
    #03DAC5
    #0F9D58


XML


  
    
    
  
    
    
      


Java
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
  
import androidx.appcompat.app.AppCompatActivity;
  
import java.util.Random;
  
public class MainActivity extends AppCompatActivity {
  
    private ImageView bot;
    private Random rand = new Random();
    private int lstDr;
    private boolean spn;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bot = findViewById(R.id.bottle);
    }
  
    // onClick function
    public void spinBottle(View v) {
        // check if the bottled has stopped spinning
        if (!spn) {
              
            // generate a random number from 1-1800
            int num = rand.nextInt(1800);
              
            // set the pivot to the centre of the image
            float pX = bot.getWidth() / 2;
            float pY = bot.getHeight() / 2;
              
            // pass parameters in RoatateAnimation function
            Animation rot = new RotateAnimation(lstDr, num, pX, pY);
              
            // set rotate duration 2500 millisecs
            rot.setDuration(2500);
              
            // rotation will persist after finishing
            rot.setFillAfter(true);
            rot.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                    spn = true;
                }
  
                @Override
                public void onAnimationEnd(Animation animation) {
                    spn = false;
                }
  
                @Override
                public void onAnimationRepeat(Animation animation) {
                }
            });
              
            // change the last direction
            lstDr = num;
              
            // start the animation
            bot.startAnimation(rot);
        }
    }
}


步骤3:使用activity_main.xml文件

XML代码用于构建活动的结构及其样式部分。它包含一个TextView 在活动的最顶部显示标题。然后,它在活动中心包含瓶子的ImageView。以下是activity_main.xml文件的代码。

XML格式



  
    
    
  
    
    
      

步骤4:使用MainActivity。 Java文件

我们将在Java文件中创建一个函数,该函数将在单击瓶子的图像时被调用。在此函数内部,我们将从1-1800生成一个随机数,该数将作为图像旋转的方向。为此,我们将使用Random()函数。我们将创建一个RotateAnimation函数的方法,该方法将具有四个参数。参数是初始方向,最终方向,X方向上的旋转轴和Y方向上的旋转轴。因为我们希望图像从中心旋转,所以我们将中心作为枢轴。所以:

  • 初始方向= 0,
  • 最终方向=从0到1800随机生成的数字,
  • ivotX =图片宽度的一半,
  • axisY =图像高度的一半。
  • 每次旋转后,初始方向=最终方向。

下面是MainActivity的代码。 Java文件。在代码内部添加了注释,以更详细地了解代码。

Java

import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
  
import androidx.appcompat.app.AppCompatActivity;
  
import java.util.Random;
  
public class MainActivity extends AppCompatActivity {
  
    private ImageView bot;
    private Random rand = new Random();
    private int lstDr;
    private boolean spn;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bot = findViewById(R.id.bottle);
    }
  
    // onClick function
    public void spinBottle(View v) {
        // check if the bottled has stopped spinning
        if (!spn) {
              
            // generate a random number from 1-1800
            int num = rand.nextInt(1800);
              
            // set the pivot to the centre of the image
            float pX = bot.getWidth() / 2;
            float pY = bot.getHeight() / 2;
              
            // pass parameters in RoatateAnimation function
            Animation rot = new RotateAnimation(lstDr, num, pX, pY);
              
            // set rotate duration 2500 millisecs
            rot.setDuration(2500);
              
            // rotation will persist after finishing
            rot.setFillAfter(true);
            rot.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {
                    spn = true;
                }
  
                @Override
                public void onAnimationEnd(Animation animation) {
                    spn = false;
                }
  
                @Override
                public void onAnimationRepeat(Animation animation) {
                }
            });
              
            // change the last direction
            lstDr = num;
              
            // start the animation
            bot.startAnimation(rot);
        }
    }
}

输出:

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!