该项目实现的功能主要有:
将项目所需要的12 张星座图片以及2 张背景图片导入程序的drawable-hdpi 文件夹中(默认情况下程序中没有drawable-hdpi 文件夹,需手动在res 文件夹中创建一个)。
在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>
在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>
主题文件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>
<?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>
在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();
}
}
}
在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;
}
}