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

一、功能介绍

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

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

二、代码实现

1. 资源准备

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

2. 布局文件设计

2.1 主Activity

在layout文件夹中编辑activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<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

<?xml version="1.0" encoding="utf-8"?>
<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">
    <!-- Base application theme. -->
    <style name="Theme.ZSStar" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/colorAccent</item>
        <item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>
</resources>

字符串资源string.xml

<resources>
    <string name="app_name">ZSStar</string>
    <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

<?xml version="1.0" encoding="utf-8"?>
<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 全局配置文件
<?xml version="1.0" encoding="utf-8"?>
<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;
    }
}

三、效果展示

在这里插入图片描述

在这里插入图片描述

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 中,activity 之间数据回传可以通过 startActivityForResult 和 onActivityResult 方法来实现。 首先,在调用下一个 activity 之前,需要使用 startActivityForResult 方法启动该 activity。在 startActivityForResult 方法中,可以传递一个 requestCode 参数,该参数用于标识该请求的唯一性。 在新的 activity 中,当需要返回数据给调用该 activityactivity 时,可以使用 setResult 方法设置返回结果,并在 setResult 方法中传递一个 resultCode 参数和一个 Intent 对象。其中,resultCode 参数用于标识返回结果的状态,而 Intent 对象则用于携带返回的数据。 最后,在调用该 activityactivity 中,需要重写 onActivityResult 方法,并在该方法中处理返回的结果。在 onActivityResult 方法中,可以通过 requestCode 和 resultCode 参数来确定返回结果的来源和状态,通过 data 参数来获取返回的数据。 以下是一个示例代码: 在调用 activity 的代码中: ``` Intent intent = new Intent(this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE); ``` 在新的 activity 中: ``` Intent intent = new Intent(); intent.putExtra("data", "Hello, World!"); setResult(RESULT_OK, intent); finish(); ``` 在调用该 activityactivity 中: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String result = data.getStringExtra("data"); // 处理返回的数据 } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值