AndroidDome(1)-如何写一个APP送给女生当生日礼物

标题

  • 前言
  • Android Studio介绍
  • 代码
  • 总结

前言

  遇到女生生日,不得准备生日礼物,刚好在学Android,顺便写了一个Dome给她当生日礼物。(很简单的而已,不喜勿喷)

Android Studio介绍

  Android Studio是Google旗下的一款软件,它可以使用Java、Kotlin、以及C++开发。当然了,Java开发是现在的潮流,但Kotlin开发才是未来。我这使用了Java开发,还是用熟悉的语言写起来得心应手。
在这里插入图片描述
 &emspAndroid Studio是有官方教程的,比较方便。
安卓发展这么多年了,教程和错误都很完备了,学会百度,幸福一生。Android Studio安装教程
  该教程是很老的版本,但八九不离十,变化不大,有问题可以联系本作者,免费解答。
安装和界面介绍就不写了,别人都有。直接开始代码吧。
哦,对,还有效果

点击按钮会跳转到下一个Activity,那个时钟是实时显示时间的,算一个创新点。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第1张图片

AndroidDome(1)-如何写一个APP送给女生当生日礼物_第2张图片
点击那个surprise会跳转到bilibili,当然了,你也可以跳到其他APP或网页。

AndroidDome(1)-如何写一个APP送给女生当生日礼物_第3张图片
哦,还有,这个APP是有背景音乐的。

代码

首先,我们打开Android Studio,新建一个project
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第4张图片
  可以看到有很多的模板,我们选择Empty Activity,当然也可以选择No Activity,不过有点麻烦。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第5张图片
点击Next,可以看到下面的情况,
  1、这里是你的project的名字,遵循C语言起名规则
  2、这里是你的Dome的存储路径,不可以有中文,有中文那个finish不会亮,不信你试试。
  3、这里选Java,你选Kotlin的话也没问题,语言只是工具嘛。
  4、这里是你安装的SDK,相当于一个解释器,没有的话要检查一下你的安装包是不是少了什么东西,还是出了什么问题,一般按照官方的安装是没有问题的。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第6张图片
点击Finish,就有以下界面了。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第7张图片
  点一下右上角的小三角,运行一波,就会发现,报错,还提示你要装什么东西。对,这个测试需要安卓手机,但你又不想用自己的手机怎么搞?那就用Android Studio自带的虚拟机。
  安装虚拟机的教程在下面的链接虚拟机安装教程

  啥都装好后,就可以写Dome了。(其实可以运行一下,其实你再创建project的时候就已经写了一个Dome了,当然了,是最简单的Hello world,-
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第8张图片
  在这里我新建了两个Activity和一个Java,和添加了一个依赖。是不是很简单。
  我们来认识一下各个重要的文件。
.java文件用来写功能的,实现各个控件的功能,其实不难。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第9张图片
这里的drawable一般都是用来存储图片和动图的
layout是页面布局,.xml文件都是布局文件,就跟UI设计一样,不过使用代码实现的。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第10张图片
最后就是添加依赖的地方了。这里有很大用处,各种炫酷的东西都要在这里添加依赖。
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第11张图片

  好了,多点点就会了,点错了就重开咯,又不是毕业设计。

  写APP先学会写按键,毕竟,按键贯穿整个APP,这里只介绍两种按键类型。
1、按键的外观设计
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第12张图片
这里使用了最普通的按键设计,你也可以搞的花里胡哨的,实用就行。花里胡哨只需在百度一搜就好了,也可以问问chatgpt。
  先有表面的东西才能搞内在的东西,先设计布局在实现其功能。
  我们在layout.xml里添加以下代码,布局要改为相对布局,我觉得这个比较方便。

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"

    tools:ignore="ExtraText,MissingClass">

//。。。。。。。。。。在这中间添加控件
</RelativeLayout>

有按键才能跟用户互动嘛,再加点小图片和文字,搞的漂漂亮亮的,女孩子才会喜欢嘛。

<!--文本框-->
//这里就是添加了文字,祝你生日快乐!斜体
    <TextView
        android:id="@+id/text01"
        android:layout_margin="20dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="italic"  //这个就是斜体,软件自带的
        android:text="祝你生日快乐!"
        android:textColor="@android:color/holo_red_light"  //文字颜色:亮红色
        android:textSize="25dp" />//文字大小

//同理可得

    <TextView
        android:id="@+id/text02"
        android:layout_margin="90dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="italic"
        android:text="送给****"
        android:textColor="@android:color/holo_red_light"
        android:textSize="25dp" />
        
    <TextView    //这里是给一个时钟做准备的,不喜欢的话也可以不要,还是挺难的
        android:id="@+id/tvTime"
        android:layout_toRightOf="@id/text01"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textStyle="italic"
        android:text="     "
        android:textColor="@android:color/holo_purple"
        android:textSize="25dp" />
        
    <!--图片展示控件-->
    //这里就是添加图片的地方,可以添加女生的照片或者其他照片,得而不得,不失为一种美好。
    <ImageView
        android:id="@+id/image01"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="200dp"
        android:layout_marginBottom="41dp"
        android:src="@drawable/img" />

<!--按钮控件-->
//按键模块,用来跳转到另一个activity的
    <Button
        android:id="@+id/btn"
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_alignParentBottom="true"
        android:layout_centerVertical="true"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="41dp"
        android:text="请点击此按钮" />  //文字可以改一改

  第一个Activity布局已经写完了,同理第二个Activity的布局也是一样的,新建Activity就不说了,这个自行摸索。
  接下来就是实现Activity之间的跳转、Activity到网站的跳转和背景音乐的设置。
  先来看第一个Activity之间的跳转。

        setContentView(R.layout.activity_main);

        // 获取控件id
        Button btn1 = findViewById(R.id.btn);

        // 监听点击事件
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 跳转到另一个名为ButtonActivity的界面
                Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                startActivity(intent);
            }
        }
        );

这里使用了一个按键监听,基础操作就不多说了,复制修改就好了。
  接下来就是Activity跳转到网站。

        setContentView(R.layout.activity_main2);
         Btn2 = findViewById(R.id.btn01);
        final Uri uri=Uri.parse("https://www.bilibili.com/" +
                "video/BV1ab411n7no/" +
                "?share_source=copy_web&vd_source=50c79c9ca19b953130a4988502bded45");
        Btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(Intent.ACTION_VIEW,uri);
                startActivity(intent);
            }
        });

这个其实跟Activity之间的跳转非常像,只是将跳转的对象换成了网站。关键字:`final Uri uri=Uri.parse

  `最后就是背景音乐的设置。

        // 启动服务播放背景音乐
        Intent intent = new Intent(MainActivity.this, MyIntentService.class);
        String action = MyIntentService.ACTION_MUSIC;
        // 设置action
        intent.setAction(action);
        startService(intent);

还要新建一个.java文件来实现音乐的播放,当然,你也可以在Activity里写,不过代码太长不建议这样写,而且后期的模块化学习无益。

package com.example.happybirthday;

import android.app.IntentService;
import android.content.Intent;
import android.media.MediaPlayer;
import android.util.Log;


/**
 * An {@link IntentService} subclass for handling asynchronous task requests in
 * a service on a separate handler thread.
 * 

* TODO: Customize class - update intent actions and extra parameters. */ public class MyIntentService extends IntentService { // TODO: Rename actions, choose action names that describe tasks that this // IntentService can perform, e.g. ACTION_FETCH_NEW_ITEMS public static final String ACTION_FOO = "com.example.bouzouki.demobilising.action.FOO"; public static final String ACTION_BAZ = "com.example.bouzouki.demobilising.action.BAZ"; // action声明 public static final String ACTION_MUSIC = "com.example.bouzouki.demobilising.action.music"; // TODO: Rename parameters public static final String EXTRA_PARAM1 = "com.example.bouzouki.demobilising.extra.PARAM1"; public static final String EXTRA_PARAM2 = "com.example.bouzouki.demobilising.extra.PARAM2"; // 声明MediaPlayer对象 private MediaPlayer mediaPlayer; public MyIntentService() { super("MyIntentService"); } @Override protected void onHandleIntent(Intent intent) { if (intent != null) { final String action = intent.getAction(); if (ACTION_FOO.equals(action)) { final String param1 = intent.getStringExtra(EXTRA_PARAM1); final String param2 = intent.getStringExtra(EXTRA_PARAM2); handleActionFoo(param1, param2); } else if (ACTION_BAZ.equals(action)) { final String param1 = intent.getStringExtra(EXTRA_PARAM1); final String param2 = intent.getStringExtra(EXTRA_PARAM2); handleActionBaz(param1, param2); } // 根据intent设置的action来执行对应服务的操作 if (ACTION_MUSIC.equals(action)){ handleActionMusic(); } } } /** * 该服务执行的操作用来播放背景音乐 */ private void handleActionMusic() { if (mediaPlayer == null){ // 根据音乐资源文件创建MediaPlayer对象 设置循环播放属性 开始播放 mediaPlayer = MediaPlayer.create(this, R.raw.bd_02); mediaPlayer.setLooping(true); mediaPlayer.start(); } } /** * Handle action Foo in the provided background thread with the provided * parameters. */ private void handleActionFoo(String param1, String param2) { // TODO: Handle action Foo throw new UnsupportedOperationException("Not yet implemented"); } /** * Handle action Baz in the provided background thread with the provided * parameters. */ private void handleActionBaz(String param1, String param2) { // TODO: Handle action Baz throw new UnsupportedOperationException("Not yet implemented"); } }

再把音乐.mp3复制到raw里就好了,再修改一下音乐文件名字。
  最后就是时间的设置:
先在这里添加以下代码
AndroidDome(1)-如何写一个APP送给女生当生日礼物_第13张图片

implementation 'com.google.android.gms:play-services-auth:20.5.0'

添加依赖
最后就是添加实现代码,覆盖掉之前的空白text

       timer = new Timer();//创建timer对象
        tvTime=findViewById(R.id.tvTime);
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                Log.v("Timer","run()...");
                mCalendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
                int hour = mCalendar.get(Calendar.HOUR_OF_DAY);//HOUR    进制为12小时   HOUR_OF_DAY  为24小时
                int minute = mCalendar.get(Calendar.MINUTE);//分钟
                int second = mCalendar.get(Calendar.SECOND) + 1;//秒数
                if (second == 60) {
                    minute += 1;
                    second = 0;
                }
                if (minute == 60){
                    hour += 1;
                    minute = 0;
                }
                if (hour == 12){
                    hour = 0;
                }
                @SuppressLint("DefaultLocale") String time = String.format("%d:%02d:%02d", hour, minute, second);
                mCalendar.set(Calendar.SECOND, second);
                mCalendar.set(Calendar.MINUTE, minute);
                mCalendar.set(Calendar.HOUR_OF_DAY, hour);

                Message message=new Message();
                message.what=0;
                message.obj=time;
                mHandler.sendMessage(message);

            }
        },0,1000);
    }
    @SuppressLint("HandlerLeak")
    Handler mHandler=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            Log.v("Timer","handleMessage()..");
            super.handleMessage(msg);
            String str=(String)msg.obj;
            tvTime.setText(str);
        }
    };

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(timer!=null){
            timer.cancel();//关闭timer
        }


这样就写完了,是不是非常简单,礼轻情意重,快去跟你爱的人说声生日快乐吧。

总结

礼物虽简易,但人情亦珍贵,好好珍惜眼前人。

你可能感兴趣的:(Android,Dome,android,android,studio,java)