【Android开发】不同Activity之间的数据回传实例(二)星座测算游戏

一、功能介绍

该项目实现的功能主要有:

  1. 在程序的首页界面可以输入用户的姓名,并且可以通过下方的日历栏选择自己的出生日期。
  2. 输入完成后,点击星座测算按钮,则程序跳转到星座分析界面。
  3. 在该界面上显示用户的个人信息,同时显示用户所属的星座以及该星座所对应的特征。

二、代码实现

1. 资源准备

将项目所需要的12 张星座图片以及2 张背景图片导入程序的drawable-hdpi 文件夹中(默认情况下程序中没有drawable-hdpi 文件夹,需手动在res 文件夹中创建一个)。

2. 布局文件设计

2.1 主Activity

在layout文件夹中编辑activity_main.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/xingkongone">

    <TextView
        android:id="@+id/game_title"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center_vertical"
        android:paddingLeft="8dp"
        android:text="星座游戏"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/game_title"
        android:orientation="vertical"
        android:paddingLeft="3dp"
        android:paddingTop="6dp">

        <TextView
            android:id="@+id/textView_constellation_info"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/constellation_info"
            android:textColor="@color/purple_500"
            android:textStyle="bold"
            android:textSize="14sp" />

        <Button
            android:id="@+id/bt_calculate"
            android:layout_width="150sp"
            android:layout_height="35sp"
            android:layout_marginTop="10dp"
            android:text="星座测算"
            android:layout_gravity="center"
            style="@style/RoundedButtonStyle"
            />

        <EditText
            android:id="@+id/et_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入姓名"
            android:inputType="textPersonName"
            android:maxLines="1" />
    LinearLayout>
    <TextView
        android:id="@+id/textView_date_of_birth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/linearLayout"
        android:text="请输入您的出生日期:"
        android:textColor="@color/black"
        android:textStyle="bold"
        android:textSize="16sp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="3dp"/>
    <DatePicker
        android:id="@+id/dp_birth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/textView_date_of_birth"
        android:layout_marginTop="30dp"
        android:layout_marginRight="30dp"/>
RelativeLayout>
2.2 辅Activity

在layout文件夹中新增activity_start.xml


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@drawable/xingkongtwo">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#008577"
        android:gravity="center_vertical"
        android:paddingLeft="8dp"
        android:text="星座游戏"
        android:textColor="@android:color/white"
        android:textSize="20sp" />
    <TextView
        android:id="@+id/tv_name"
        style="@style/star_tv" />

    <TextView
        android:id="@+id/tv_birth"
        style="@style/star_tv" />

    <ImageView
        android:id="@+id/img_star"
        android:layout_width="160dp"
        android:layout_height="160dp"
        android:layout_gravity="center"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="16dp"/>

    <TextView
        android:id="@+id/tv_star_info"
        style="@style/star_tv" />

LinearLayout>
2.3 其他资源文件

主题文件themes.xml

<resources xmlns:tools="http://schemas.android.com/tools">
    
    <style name="Theme.ZSStar" parent="Theme.AppCompat.Light.NoActionBar">
        
        "colorPrimary">@color/colorAccent
        "colorPrimaryVariant">@color/colorPrimaryDark
        "colorOnPrimary">@color/white
        
        "colorSecondary">@color/teal_200
        "colorSecondaryVariant">@color/teal_700
        "colorOnSecondary">@color/black
        
        "android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant
        
    style>
resources>

字符串资源string.xml

<resources>
    <string name="app_name">ZSStarstring>
    <string name="白羊座"> 白羊座:指生日为阳历3.21-4.19 的人,四象属火,主管火星。
        ①优势:热情活泼,精力充沛,慷慨大方,行动力强,不会犹犹豫豫,喜欢竞争,敢做敢当,不畏挫
        折,凡事都要争第一。白羊男是说一不二的纯爷们,白羊女就是典型的女汉子。
        ②不足:直肠子,有点小脾气,以自我为中心,没有耐性,喜怒无常,冲动轻率,爱冒险,做事瞻前
        不顾后,人生大起大落,易把风险当机会。
        ③建议:站得高看得远是好事,但是务必思虑周全,三思而后行,要学会换位思考,博采众议,广纳
        雅言。
    string>
    <string name="金牛座"> 金牛座:指生日为阳历4.20-5.20 的人,四象属土,主管金星。
        ①优势:沉稳踏实,不喜欢变动,有敏锐洞察力,行事谨慎,思虑周全,不打没把握的仗,喜欢享受
        的生活和环境,是一名理财高手。金牛男有大男人的倾向,金牛女爱投资自己。
        ②不足:比较慢热,有时也固执己见,倔强起来很吓人,把钱看的很重,让人感觉物质,属于拜金主
        义者。
        ③建议:别把钱财看得太重,还有过于谨慎易错过良机,应加强行动力,学会控制情绪,可以让人际
        关系更融洽。
    string>
    <string name="双子座">双子座:指生日为阳历5.21-6.21 的人,四象属风,主管水星。
        ①优势:思维敏捷,反应迅速,适应力强,对新鲜事物的接受能力也很强,口齿伶俐,风趣机智,善
        于交流。双子男表面很花心其实深情,双子女喜欢求新求变。
        ②不足:有双重性格,情绪变化快,追求新鲜感,做事常常虎头蛇尾,而且花心多变,难以专精。因
        为太好辩,容易与人发生冲突。
        ③建议:应加强耐性,要学会坚持,培养静心的功夫,让自己不那么三心二意。
    string>
    <string name="巨蟹座">巨蟹座:指生日为阳历6.22-7.22 的人,四象属水,主管月亮。
        ①优势:心思细密,行事谨慎,有想法但不轻易表现,情感丰富,待人友善,善解人意,家庭观念浓
        厚,重情重义,有强烈的责任心和奉献精神。巨蟹男顾家,巨蟹女超有爱。
        ②不足:心灵脆弱,害怕竞争激烈的环境,一点点风吹草动都可能让它情绪起伏,只有在和谐的氛围
        中做事,才会让它感到安心,激发出潜能。多愁善感,不够自信,容易打退堂鼓,有逃避心理,害怕面对
        现实。
        ③建议:放下心中的包袱,多加自我鼓励,增强自信心。
    string>
    <string name="狮子座">狮子座:指生日为阳历7.23-8.22 的人,四象属火,主管太阳。
        ①优势:喜欢被粉丝膜拜,待人也慷慨大方,胸怀坦荡,自信自强,很有主见,做事雷厉风行,喜欢
        挑战权威,永不服输,有较强领导能力,有王者风范。狮子男爱面子,狮子女讲义气。
        ②不足:欲望强烈,得失心重,骄傲自负,性格暴躁,行事莽撞,对权利很执着,以自我为中心,且
        自尊心强,好面子,失败或无人关注时会失落沉沦。
        ③建议:弱化欲望,不过度求名利,避免自负,舍弃得失心,改变鲁莽行为,学会平和定性。
    string>
    <string name="处女座">处女座:指生日为阳历8.23-9.22 的人,四象属土,主管水星。
        ①优势:思维敏捷,乐于助人,为人谦虚,待人真诚,但会保持距离,处事不惊,办事谨慎,冷静,
        理性,耐心,善于分析和研究,对自己要求很高,凡事要求做到尽善尽美,是个完美主义者。处女男毅力
        坚强,处女女求知欲强。
        ②不足:生活要求严谨,就是人们常说的洁癖症,但是太过吹毛求疵的性格容易给身边的人增加压
        力,使人远离自己。自己给自己的压力太大,容易自我设限,不易放开胸怀。
        ③建议:不必太过小心翼翼,学会释放压力,可让自己开阔胸襟,多与人群交流互动,可让完美的处
        女收获更多。
    string>
    <string name="天秤座">天秤座:指生日为阳历9.23-10.23 的人,四象属风,主管金星。
        ①优势:待人友善,优雅气质,谈吐得体,善于察言观色,交际能力强,是个谈判高手。追求外表光
        鲜,喜欢美丽的事物,凡事要求公平公正,最怕冲突、不和谐。天秤男容易因自己而忽略别人,天秤女喜
        欢被陪伴的感觉。
        ②不足:最大的缺点就是面对选择时,总是犹豫不决,易失去自我。害怕寂寞,有时还会神经过敏,
        显得神经质,出现焦虑不安的状态。总喜欢在他人面前表现自己完美的一面,但也容易因此让人感觉虚
        荣、做作。
        ③建议:不用过于追求平衡,否则容易适得其反。应放松身心,释放压力,增强魄力与行动力,快速
        作出决定。
    string>
    <string name="天蝎座">天蝎座:指生日为阳历10.24-11.22 的人,四象属水,主管冥王星和火星。
        ①优势:外表低调深沉,实则企图心旺盛,充满神秘感,处事非常理性,明察秋毫,注重过程,不会
        轻易放弃,有毅力,有责任感,有敏锐观察力,凡事都亲力亲为。天蝎男自我主义色彩很强烈,天蝎女的
        自我保护意识很强。
        ②不足:城府颇深,孤僻自怜,喜欢独处,不苟言笑,令人难以亲近,占有欲强,对他人有不信任
        感,都靠自身感觉,也是一个记仇的星座,复仇心理重。
        ③建议:应消除顾忌,放开胸怀,拓展人脉,自然人生格局也会随之扩大。
    string>
    <string name="射手座">射手座:指生日为阳历11.23-12.21 的人,四象属火,主管木星。
        ①优势:乐观开朗,勇敢独立,崇尚自由,喜欢冒险,精力充沛,反应灵敏,处事果断,办事效率
        高,为人坦率,不拘小节,幽默风趣,待人友善,很讲义气,朋友颇多。射手男讨厌束缚爱自由,射手女
        不耍心计但是任性。
        ②不足:性格浮躁,喜欢吹嘘,办事草率,非常粗心,虎头蛇尾,常常半途而废,有时还会幽默过
        头,得罪人自己都不知道。
        ③建议:收收心,办事要注重细节,考虑周全,还有要锻炼自己的毅力,多点耐心,学会坚持。幽默
        是好事,但是要懂得察言观色,适可而止。
    string>
    <string name="摩羯座">摩羯座:指生日为阳历12.22-1.19 的人,四象属土,主管土星。
        ①优势:喜欢从容不迫,低调行事,深思熟虑,冷静判断,不畏挫折,毅力顽强,心胸宽广,公平公
        正,有理想,有责任感,时间观念强,擅长运筹帷幄,组织能力强,意志力强,不容易受影响,值得依
        赖。摩羯男外表严肃内心温柔,摩羯女外表冷漠内心热情。
        ②不足:刻板,保守,固执,孤独,悲观,不擅沟通,没有安全感,对他人不会完全相信。
        ③建议:应放松一些,别给自己施加太多压力,别让神经总是处于紧张状态,休息是为了走的更远。
    string>
    <string name="水瓶座">水瓶座:指生日为阳历1.20-2.18 的人,四象属风,主管天王星。
        ①优势:好奇心强,善于观察,思想前卫,创意十足,友善博爱,注重隐私,求新求变,不喜欢一成
        不变,有开拓精神。水瓶男外表爽直内心矛盾,水瓶女常走极端路线。
        ②不足:倔强叛逆,缺乏热情,说话和做事全凭自己的兴趣,以自我为中心,对朋友很难推心置腹,
        思想多变,不按常理出牌。
        ③建议:不要过于执着,过于压抑自己,多和朋友或同事接触交流,有什么好主意也多跟他们分享,
        这样就不会给人以冷漠的印象了。
    string>
    <string name="双鱼座">双鱼座:指生日为阳历2.19-3.20 的人,四象属水,主管海王星。
        ①优势:内向害羞,温柔体贴,善解人意,感情丰富,多才多艺,气质迷人,擅抽象思考,没有心
        机,极富同情心,人际关系良好,不会随意伤人,也看不得他人受伤。双鱼男浪漫多情,双鱼女多愁善
        感。
        ②不足:偏情绪化,多愁善感,缺乏理性,感情用事,幻想太多,不够实际,意志不坚定,容易受影
        响,缺乏自信,害怕面对现实。
        ③建议:现实和理想还是有区别的,应实际点,学会理性思考,控制好自己的情绪,增强自信,增强
        意志力,避免影响他人,也不受他人影响。
    string>
    <string name="constellation_info">
        在西方占星学上,黄道12星座是宇由方位的代名词,一个人出生时,各星体落入黄道上的位置,
        说明了一个人的先天性格及天赋。黄道12星座象征心理层面,反映出一个人行为的表现的方式。
        于是将黄道分成12个星座,称为黄道12星座。依次为白羊座、金牛座、双子座、巨蟹座、狮子座、
        处女座、天秤座、天蝎座、射手座、摩羯座、水瓶座、双子座。
    string>
resources>

在layout中添加按钮背景rounded_button.xml


<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape>
            <corners android:radius="10dp" />
            <solid android:color="@color/colorAccent" />
        shape>
    item>
    <item>
        <shape>
            <corners android:radius="10dp" />
            <solid android:color="@color/colorAccent" />
            <stroke android:width="1.5dp" android:color="@color/colorAccentDark"/>
        shape>
    item>
selector>

3. 实现逻辑功能

3.0 全局配置文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hzj.zsstar">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.ZSStar">
        <activity
            android:name=".StarActivity"
            android:exported="true" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            intent-filter>
        activity>
    application>

manifest>
3.1 首页功能

在MainActivity 中实现“星座测算”按钮的点击事件,当点击按钮时程序跳转到星座测算界面StartActivity,同时,将用户姓名和日历上选中的日期发送到星座测算界面。

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    private MediaPlayer mediaPlayer = null;
    private MediaPlayer mediaPlayer_button = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 初始化背景音乐
        mediaPlayer = MediaPlayer.create(this, R.raw.star_victory);
        mediaPlayer_button = MediaPlayer.create(this, R.raw.button_bgm);
        // 循环播放
        mediaPlayer.setLooping(true);
        mediaPlayer.setVolume(0.3f,0.3f);
        mediaPlayer.start();
        // 找到“星座测算”按钮并添加点击事件的监听
        Button buttonCalculate = findViewById(R.id.bt_calculate);
        buttonCalculate.setOnClickListener(this);
    }
    @Override
    public void onClick(View v) {
        mediaPlayer_button.start();
        // 创建一个Intent对象,指定从MainActivity跳转到StarActivity
        Intent intent = new Intent(MainActivity.this, StarActivity.class);

        // 获取用户姓名
        EditText editTextName = findViewById(R.id.et_name);
        String name = editTextName.getText().toString();

        // 获取选中的日期
        DatePicker datePicker = findViewById(R.id.dp_birth);
        int day = datePicker.getDayOfMonth();
        int month = datePicker.getMonth() + 1;
        int year = datePicker.getYear();

        // 将姓名和日期作为额外数据放入Intent中
        intent.putExtra("name", name);
        intent.putExtra("day", day);
        intent.putExtra("month", month);
        intent.putExtra("year", year);

        // 启动StarActivity
        startActivity(intent);
    }
    @Override
    protected void onDestroy(){
        super.onDestroy();
        if (!Objects.isNull(mediaPlayer) || !Objects.isNull(mediaPlayer_button) ){
            mediaPlayer_button.release();
            mediaPlayer.release();
        }
    }
}
3.2 星座测算结果显示

在StartActivity 中,接收第一页传递过来的值并且显示到对应的文本控件里面,然后根据日期计算出对应的星座,再根据不同的星座显示对应的星座图片和星座介绍文字。

public class StarActivity extends AppCompatActivity {

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

        Intent intent = getIntent();
        String name = intent.getStringExtra("name");
        int day = intent.getIntExtra("day", 0);
        int month = intent.getIntExtra("month", 0);
        int year = intent.getIntExtra("year", 0);

        TextView tvName = findViewById(R.id.tv_name);
        tvName.setText("姓名:" + name);

        TextView tvBirth = findViewById(R.id.tv_birth);
        tvBirth.setText("您的出生日期为:" + year + "年" + month + "月" + day + "日");

        ImageView imgStar = findViewById(R.id.img_star);
        TextView tvStarInfo = findViewById(R.id.tv_star_info);

        String star = calculateStar(day, month);
        switch (star) {
            case "水瓶座":
                imgStar.setImageResource(R.drawable.shuiping);
                tvStarInfo.setText(R.string.水瓶座);
                break;
            case "双鱼座":
                imgStar.setImageResource(R.drawable.shuangyu);
                tvStarInfo.setText(R.string.双鱼座);
                break;
            case "白羊座":
                imgStar.setImageResource(R.drawable.baiyang);
                tvStarInfo.setText(R.string.白羊座);
                break;
            case "金牛座":
                imgStar.setImageResource(R.drawable.jinniu);
                tvStarInfo.setText(R.string.金牛座);
                break;
            case "双子座":
                imgStar.setImageResource(R.drawable.shuangzi);
                tvStarInfo.setText(R.string.双子座);
                break;
            case "巨蟹座":
                imgStar.setImageResource(R.drawable.juxie);
                tvStarInfo.setText(R.string.巨蟹座);
                break;
            case "狮子座":
                imgStar.setImageResource(R.drawable.shizi);
                tvStarInfo.setText(R.string.狮子座);
                break;
            case "处女座":
                imgStar.setImageResource(R.drawable.chunv);
                tvStarInfo.setText(R.string.处女座);
                break;
            case "天秤座":
                imgStar.setImageResource(R.drawable.tiancheng);
                tvStarInfo.setText(R.string.天秤座);
                break;
            case "天蝎座":
                imgStar.setImageResource(R.drawable.tianxie);
                tvStarInfo.setText(R.string.天蝎座);
                break;
            case "射手座":
                imgStar.setImageResource(R.drawable.sheshou);
                tvStarInfo.setText(R.string.射手座);
                break;
            case "摩羯座":
                imgStar.setImageResource(R.drawable.mojie);
                tvStarInfo.setText(R.string.摩羯座);
                break;
        }
    }

    private String calculateStar(int day, int month) {
        // 实现星座计算逻辑,根据传入的day和month,返回对应的星座字符串
        String star = "";
        if ((month == 1 && day >= 20) || (month == 2 && day <= 18)) {
            star = "水瓶座";
        } else if ((month == 2 && day >= 19) || (month == 3 && day <= 20)) {
            star = "双鱼座";
        } else if ((month == 3 && day >= 21) || (month == 4 && day <= 19)) {
            star = "白羊座";
        } else if ((month == 4 && day >= 20) || (month == 5 && day <= 20)) {
            star = "金牛座";
        } else if ((month == 5 && day >= 21) || (month == 6 && day <= 21)) {
            star = "双子座";
        } else if ((month == 6 && day >= 22) || (month == 7 && day <= 22)) {
            star = "巨蟹座";
        } else if ((month == 7 && day >= 23) || (month == 8 && day <= 22)) {
            star = "狮子座";
        } else if ((month == 8 && day >= 23) || (month == 9 && day <= 22)) {
            star = "处女座";
        } else if ((month == 9 && day >= 23) || (month == 10 && day <= 22)) {
            star = "天秤座";
        } else if ((month == 10 && day >= 23) || (month == 11 && day <= 21)) {
            star = "天蝎座";
        } else if ((month == 11 && day >= 22) || (month == 12 && day <= 21)) {
            star = "射手座";
        } else if ((month == 12 && day >= 22) || (month == 1 && day <= 19)) {
            star = "摩羯座";
        }
        return star;
    }
}

三、效果展示

【Android开发】不同Activity之间的数据回传实例(二)星座测算游戏_第1张图片

你可能感兴趣的:(期末复习,android,游戏,java)