一、功能介绍
该项目实现的功能主要有:
- 在程序的首页界面可以输入用户的姓名,并且可以通过下方的日历栏选择自己的出生日期。
- 输入完成后,点击星座测算按钮,则程序跳转到星座分析界面。
- 在该界面上显示用户的个人信息,同时显示用户所属的星座以及该星座所对应的特征。
二、代码实现
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"><TextViewandroid: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" /><LinearLayoutandroid: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"><TextViewandroid: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" /><Buttonandroid: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"/><EditTextandroid:id="@+id/et_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="请输入姓名"android:inputType="textPersonName"android:maxLines="1" /></LinearLayout><TextViewandroid: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"/><DatePickerandroid: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"><TextViewandroid: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" /><TextViewandroid:id="@+id/tv_name"style="@style/star_tv" /><TextViewandroid:id="@+id/tv_birth"style="@style/star_tv" /><ImageViewandroid:id="@+id/img_star"android:layout_width="160dp"android:layout_height="160dp"android:layout_gravity="center"android:layout_marginTop="20dp"android:layout_marginBottom="16dp"/><TextViewandroid: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"><applicationandroid: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"><activityandroid:name=".StarActivity"android:exported="true" /><activityandroid: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;@Overrideprotected 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);}@Overridepublic void onClick(View v) {mediaPlayer_button.start();// 创建一个Intent对象,指定从MainActivity跳转到StarActivityIntent 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);// 启动StarActivitystartActivity(intent);}@Overrideprotected 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 {@Overrideprotected 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;}
}