[文章]HarmonyOS实战—实现相亲APP

阅读量0
0
0
简易版 相亲APP
  • 实现如下效果:
  • 如果喜欢就点击下面的“联系方式”,不喜欢就点击“下一个
1. 布局实现
  • 新建项目:MakeFriendsApplication
  • 把以下九个girl图片复制到 media 文件夹下
  • 有需要上面图片素材的小伙伴可以自取:https://www.aliyundrive.com/s/j59dy5redPR
  • 当然也可以自己在网上找,图片信息如下:
  • 可以在上面的实现看到布局是由:一个图片+三个文本+两个按钮 组成的
  • 布局实现:
ability_main
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DirectionalLayout
  3.     xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4.     ohos:height="match_parent"
  5.     ohos:width="match_parent"
  6.     ohos:alignment="center"
  7.     ohos:orientation="vertical">

  8.     <Image
  9.         ohos:id="$+id:img"
  10.         ohos:height="match_content"
  11.         ohos:width="match_content"
  12.         ohos:image_src="$media:girl1"/>

  13.     <Text
  14.         ohos:id="$+id:name"
  15.         ohos:height="50vp"
  16.         ohos:width="150vp"
  17.         ohos:text="姓名:王美花"
  18.         ohos:text_size="20fp"/>

  19.     <Text
  20.         ohos:id="$+id:age"
  21.         ohos:height="50vp"
  22.         ohos:width="150vp"
  23.         ohos:text="年龄:29"
  24.         ohos:text_size="20fp"/>

  25.     <Text
  26.         ohos:id="$+id:address"
  27.         ohos:height="50vp"
  28.         ohos:width="150vp"
  29.         ohos:text="地址:南京"
  30.         ohos:text_size="20fp"/>
  31.    
  32.     <Button
  33.         ohos:id="$+id:next"
  34.         ohos:height="50vp"
  35.         ohos:width="150vp"
  36.         ohos:background_element="#92D050"
  37.         ohos:text="下一个"
  38.         ohos:text_size="20fp"
  39.         ohos:text_color="#FFFFFF"/>

  40.     <Button
  41.         ohos:id="$+id:get"
  42.         ohos:height="50vp"
  43.         ohos:width="150vp"
  44.         ohos:background_element="#92D050"
  45.         ohos:text="获取联系方式"
  46.         ohos:text_size="20fp"
  47.         ohos:text_color="#FFFFFF"
  48.         ohos:top_margin="10vp"/>

  49. </DirectionalLayout>
复制代码

  • 运行:

2. 核心业务逻辑实现
  • 先找到组件对象
  • 业务:点击了按钮“下一个”就要修改上面的信息,能不能把上面的信息看作成一个整体的对象?现在有9个相亲对象,点击“下一个”的时候,就会随机把一个相亲对象的信息去显示在上面。
  • 创建一个Javabean类去描述女朋友信息,有了Javabean类后才能在代码中创建对象
  • 在domain中新建类名为:GirlFriend,在类中的属性有哪些?
  • 如:图片、姓名、地址、年龄都是GirlFriend类中的属性
  • 在资源管理器中获取图片,发现girl图片是int类型的
  • 所以在JavaBean中GirlFriend类中图片类型使用int类型
  • 其他属性使用对应的类型
  • 最后生成标准的JavaBean即可
  1. package com.xdr630.makefriendsapplication.domain;

  2. public class GirlFriend {
  3.     //照片
  4.     private int photoID;
  5.     //姓名
  6.     private String name;
  7.     //年龄
  8.     private int age;
  9.     //地址
  10.     private String address;

  11.     //空参 + 全参:alt + insert

  12.     public GirlFriend() {
  13.     }

  14.     public GirlFriend(int photoID, String name, int age, String address) {
  15.         this.photoID = photoID;
  16.         this.name = name;
  17.         this.age = age;
  18.         this.address = address;
  19.     }

  20.     public int getPhotoID() {
  21.         return photoID;
  22.     }

  23.     public void setPhotoID(int photoID) {
  24.         this.photoID = photoID;
  25.     }

  26.     public String getName() {
  27.         return name;
  28.     }

  29.     public void setName(String name) {
  30.         this.name = name;
  31.     }

  32.     public int getAge() {
  33.         return age;
  34.     }

  35.     public void setAge(int age) {
  36.         this.age = age;
  37.     }

  38.     public String getAddress() {
  39.         return address;
  40.     }

  41.     public void setAddress(String address) {
  42.         this.address = address;
  43.     }
  44. }
复制代码

  • 创建好了Javabean,就可以创建一个集合装9个相亲的对象,使用集合来存储了,ArrayList,泛型就可以直接写创建好的GirlFriend 类
  • 在以后学习了和服务器交互之后,这些数据都是从服务器获取的,就不是一个一个添加了
  • 下面就是手动添加数据来源
  • 创建一个女朋友对象(new GirlFriend )并添加到 list 当中
  • 为了方便,省的去查看Javabean中属性的排序,Ctrl + P 就可以查看参数了
  • 添加完成9个对象

  • 接着给按钮添加点击事件,两个按钮都要添加,分别是“next”和“get”按钮
  • 实现本类中点击事件

  • 当next按钮被点击后,就会执行本类中的onClick方法
  • get 按钮同上也要添加单击事件
  • 然后在 onClick 方法中判断点击是 next 按钮 或 get 按钮
  • 因为在 onClick 方法中要用到按钮的对象,所以把按钮的对象提升为 成员变量 才能在onClick方法中被访问的到,用到哪个就提哪个,这些组件都用的到,所以都提为成员变量
  • 在下面onClick方法当中,要从集合中获取girl信息,所以集合也要提为成员变量
  • Random对象也放在成员位置,表示在程序启动之后就创建了一个,如果放在onClick方法中,当点击一次就创建一次,内存冗余。

MainAbilitySlice
  1. package com.xdr630.makefriendsapplication.slice;

  2. import com.xdr630.makefriendsapplication.ResourceTable;
  3. import com.xdr630.makefriendsapplication.domain.GirlFriend;
  4. import ohos.aafwk.ability.AbilitySlice;
  5. import ohos.aafwk.content.Intent;
  6. import ohos.agp.components.Button;
  7. import ohos.agp.components.Component;
  8. import ohos.agp.components.Image;
  9. import ohos.agp.components.Text;

  10. import java.util.ArrayList;
  11. import java.util.Random;

  12. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener {

  13.         Image img;
  14.         Text name;
  15.         Text age;
  16.         Text address;
  17.         Button next;
  18.         Button get;

  19.         ArrayList<GirlFriend> list = new ArrayList<>();

  20.     @Override
  21.     public void onStart(Intent intent) {
  22.         super.onStart(intent);
  23.         super.setUIContent(ResourceTable.Layout_ability_main);

  24.         //1.找到组件对象
  25.         img = (Image) findComponentById(ResourceTable.Id_img);
  26.         name = (Text) findComponentById(ResourceTable.Id_name);
  27.         age = (Text) findComponentById(ResourceTable.Id_age);
  28.         address = (Text) findComponentById(ResourceTable.Id_address);
  29.         next = (Button) findComponentById(ResourceTable.Id_next);
  30.         get = (Button) findComponentById(ResourceTable.Id_get);
  31.         //2.创建一个集合装9个相亲的对象


  32.         //添加9个对象
  33.         //在以后学习了和服务器交互之后,这些数据都是从服务器获取的
  34.         list.add(new GirlFriend(ResourceTable.Media_girl1,"王美花1",29,"南京"));
  35.         list.add(new GirlFriend(ResourceTable.Media_girl2,"王美花2",30,"上海"));
  36.         list.add(new GirlFriend(ResourceTable.Media_girl3,"王美花3",31,"武汉"));
  37.         list.add(new GirlFriend(ResourceTable.Media_girl4,"王美花4",28,"长沙"));
  38.         list.add(new GirlFriend(ResourceTable.Media_girl5,"王美花5",25,"南昌"));
  39.         list.add(new GirlFriend(ResourceTable.Media_girl6,"王美花6",26,"杭州"));
  40.         list.add(new GirlFriend(ResourceTable.Media_girl7,"王美花7",23,"深圳"));
  41.         list.add(new GirlFriend(ResourceTable.Media_girl8,"王美花8",22,"北京"));
  42.         list.add(new GirlFriend(ResourceTable.Media_girl9,"王美花9",24,"广州"));

  43.         //3.给按钮添加点击事件
  44.         next.setClickedListener(this);
  45.         get.setClickedListener(this);

  46.     }

  47.     @Override
  48.     public void onActive() {
  49.         super.onActive();
  50.     }

  51.     @Override
  52.     public void onForeground(Intent intent) {
  53.         super.onForeground(intent);
  54.     }

  55.     Random r =  new Random();

  56.     @Override
  57.     public void onClick(Component component) {
  58.         if (component == next){
  59.             //点击的是下一个 --- 换一个girl的信息
  60.             //从集合中获取一个随机的girl的信息

  61.             //获取一个随机索引
  62.             int randomIndex = r.nextInt(list.size());
  63.             //通过随机索引获取随机girl信息
  64.             GirlFriend girlFriend = list.get(randomIndex);
  65.             //把随机出来的信息设置到界面当中
  66.             img.setImageAndDecodeBounds(girlFriend.getPhotoID());
  67.             name.setText("姓名:" + girlFriend.getName());
  68.             age.setText("年龄:" + girlFriend.getAge());
  69.             address.setText("地址:" + girlFriend.getAddress());


  70.         }else if (component == get){
  71.             //获取联系方式
  72.             //扩展:可以跳转到界面让用户充值界面,充值后才能看到girl信息
  73.         }
  74.     }
  75. }

复制代码


  • 运行:

  • 点击“下一个”



  • 当点击“下一个”按钮时,信息也会随之一起获取的到,所以有需求的小伙伴可以扩展下,当点击“下一个”按钮时信息是隐藏的,只有当点击“获取联系方式”时才能显示出对应的信息,或也可以添加充值页面,当点击“获取联系方式”时,就跳转到充值页面,只有充值完后才能看到对应的信息。

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友