HarmonyOS实战—实现相亲APP

系统 OpenHarmony
本篇带给大家运用HarmonyOS打造一款相亲APP,愿社区的每一位单身的同志都能通过逛社区找到心仪的对象。

[[419696]]

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

简易版 相亲APP

实现如下效果:

如果喜欢就点击下面的“联系方式”,不喜欢就点击“下一个”

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区
HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

1. 布局实现

新建项目:MakeFriendsApplication

把以下九个girl图片复制到 media 文件夹下

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区
HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

有需要上面图片素材的小伙伴可以自取:https://www.aliyundrive.com/s/j59dy5redPR

当然也可以自己在网上找,图片信息如下:

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

可以在上面的实现看到布局是由:一个图片+三个文本+两个按钮 组成的

布局实现:

  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.  
  9.     <Image 
  10.         ohos:id="$+id:img" 
  11.         ohos:height="match_content" 
  12.         ohos:width="match_content" 
  13.         ohos:image_src="$media:girl1"/> 
  14.  
  15.     <Text 
  16.         ohos:id="$+id:name" 
  17.         ohos:height="50vp" 
  18.         ohos:width="150vp" 
  19.         ohos:text="姓名:王美花" 
  20.         ohos:text_size="20fp"/> 
  21.  
  22.     <Text 
  23.         ohos:id="$+id:age" 
  24.         ohos:height="50vp" 
  25.         ohos:width="150vp" 
  26.         ohos:text="年龄:29" 
  27.         ohos:text_size="20fp"/>  
  28.  
  29.     <Text 
  30.         ohos:id="$+id:address" 
  31.         ohos:height="50vp" 
  32.         ohos:width="150vp" 
  33.         ohos:text="地址:南京" 
  34.         ohos:text_size="20fp"/> 
  35.      
  36.     <Button 
  37.         ohos:id="$+id:next" 
  38.         ohos:height="50vp" 
  39.         ohos:width="150vp" 
  40.         ohos:background_element="#92D050" 
  41.         ohos:text="下一个" 
  42.         ohos:text_size="20fp" 
  43.         ohos:text_color="#FFFFFF"/> 
  44.  
  45.     <Button 
  46.         ohos:id="$+id:get" 
  47.         ohos:height="50vp" 
  48.         ohos:width="150vp" 
  49.         ohos:background_element="#92D050" 
  50.         ohos:text="获取联系方式" 
  51.         ohos:text_size="20fp" 
  52.         ohos:text_color="#FFFFFF" 
  53.         ohos:top_margin="10vp"/> 
  54.  
  55. </DirectionalLayout> 

运行:

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

2. 核心业务逻辑实现

先找到组件对象

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

业务:点击了按钮“下一个”就要修改上面的信息,能不能把上面的信息看作成一个整体的对象?

现在有9个相亲对象,点击“下一个”的时候,就会随机把一个相亲对象的信息去显示在上面。

创建一个Javabean类去描述女朋友信息,有了Javabean类后才能在代码中创建对象

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

在domain中新建类名为:GirlFriend,在类中的属性有哪些?

如:图片、姓名、地址、年龄都是GirlFriend类中的属性

在资源管理器中获取图片,发现girl图片是int类型的

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

所以在JavaBean中GirlFriend类中图片类型使用int类型

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

其他属性使用对应的类型

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

最后生成标准的JavaBean即可

  1. package com.xdr630.makefriendsapplication.domain; 
  2.  
  3. public class GirlFriend { 
  4.     //照片 
  5.     private int photoID; 
  6.     //姓名 
  7.     private String name
  8.     //年龄 
  9.     private int age; 
  10.     //地址 
  11.     private String address; 
  12.  
  13.     //空参 + 全参:alt + insert 
  14.  
  15.     public GirlFriend() { 
  16.     } 
  17.  
  18.     public GirlFriend(int photoID, String nameint age, String address) { 
  19.         this.photoID = photoID; 
  20.         this.name = name
  21.         this.age = age; 
  22.         this.address = address; 
  23.     } 
  24.  
  25.     public int getPhotoID() { 
  26.         return photoID; 
  27.     } 
  28.  
  29.     public void setPhotoID(int photoID) { 
  30.         this.photoID = photoID; 
  31.     } 
  32.  
  33.     public String getName() { 
  34.         return name
  35.     } 
  36.  
  37.     public void setName(String name) { 
  38.         this.name = name
  39.     } 
  40.  
  41.     public int getAge() { 
  42.         return age; 
  43.     } 
  44.  
  45.     public void setAge(int age) { 
  46.         this.age = age; 
  47.     } 
  48.  
  49.     public String getAddress() { 
  50.         return address; 
  51.     } 
  52.  
  53.     public void setAddress(String address) { 
  54.         this.address = address; 
  55.     } 

创建好了Javabean,就可以创建一个集合装9个相亲的对象,使用集合来存储了,ArrayList,泛型就可以直接写创建好的GirlFriend 类

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

在以后学习了和服务器交互之后,这些数据都是从服务器获取的,就不是一个一个添加了

下面就是手动添加数据来源

创建一个女朋友对象(new GirlFriend )并添加到 list 当中

为了方便,省的去查看Javabean中属性的排序,Ctrl + P 就可以查看参数了

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

添加完成9个对象

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

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

实现本类中点击事件

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

当next按钮被点击后,就会执行本类中的onClick方法

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

get 按钮同上也要添加单击事件

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

然后在 onClick 方法中判断点击是 next 按钮 或 get 按钮

因为在 onClick 方法中要用到按钮的对象,所以把按钮的对象提升为 成员变量 才能在onClick方法中被访问的到,用到哪个就提哪个,这些组件都用的到,所以都提为成员变量。

在下面onClick方法当中,要从集合中获取girl信息,所以集合也要提为成员变量

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

Random对象也放在成员位置,表示在程序启动之后就创建了一个,如果放在onClick方法中,当点击一次就创建一次,内存冗余。

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

MainAbilitySlice

  1. package com.xdr630.makefriendsapplication.slice; 
  2.  
  3. import com.xdr630.makefriendsapplication.ResourceTable; 
  4. import com.xdr630.makefriendsapplication.domain.GirlFriend; 
  5. import ohos.aafwk.ability.AbilitySlice; 
  6. import ohos.aafwk.content.Intent; 
  7. import ohos.agp.components.Button; 
  8. import ohos.agp.components.Component; 
  9. import ohos.agp.components.Image; 
  10. import ohos.agp.components.Text; 
  11.  
  12. import java.util.ArrayList; 
  13. import java.util.Random; 
  14.  
  15. public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { 
  16.  
  17.         Image img; 
  18.         Text name
  19.         Text age; 
  20.         Text address; 
  21.         Button next
  22.         Button get; 
  23.  
  24.         ArrayList<GirlFriend> list = new ArrayList<>(); 
  25.  
  26.     @Override 
  27.     public void onStart(Intent intent) { 
  28.         super.onStart(intent); 
  29.         super.setUIContent(ResourceTable.Layout_ability_main); 
  30.  
  31.         //1.找到组件对象 
  32.         img = (Image) findComponentById(ResourceTable.Id_img); 
  33.         name = (Text) findComponentById(ResourceTable.Id_name); 
  34.         age = (Text) findComponentById(ResourceTable.Id_age); 
  35.         address = (Text) findComponentById(ResourceTable.Id_address); 
  36.         next = (Button) findComponentById(ResourceTable.Id_next); 
  37.         get = (Button) findComponentById(ResourceTable.Id_get); 
  38.         //2.创建一个集合装9个相亲的对象 
  39.  
  40.  
  41.         //添加9个对象 
  42.         //在以后学习了和服务器交互之后,这些数据都是从服务器获取的 
  43.         list.add(new GirlFriend(ResourceTable.Media_girl1,"王美花1",29,"南京")); 
  44.         list.add(new GirlFriend(ResourceTable.Media_girl2,"王美花2",30,"上海")); 
  45.         list.add(new GirlFriend(ResourceTable.Media_girl3,"王美花3",31,"武汉")); 
  46.         list.add(new GirlFriend(ResourceTable.Media_girl4,"王美花4",28,"长沙")); 
  47.         list.add(new GirlFriend(ResourceTable.Media_girl5,"王美花5",25,"南昌")); 
  48.         list.add(new GirlFriend(ResourceTable.Media_girl6,"王美花6",26,"杭州")); 
  49.         list.add(new GirlFriend(ResourceTable.Media_girl7,"王美花7",23,"深圳")); 
  50.         list.add(new GirlFriend(ResourceTable.Media_girl8,"王美花8",22,"北京")); 
  51.         list.add(new GirlFriend(ResourceTable.Media_girl9,"王美花9",24,"广州")); 
  52.  
  53.         //3.给按钮添加点击事件 
  54.         next.setClickedListener(this); 
  55.         get.setClickedListener(this); 
  56.  
  57.     } 
  58.  
  59.     @Override 
  60.     public void onActive() { 
  61.         super.onActive(); 
  62.     } 
  63.  
  64.     @Override 
  65.     public void onForeground(Intent intent) { 
  66.         super.onForeground(intent); 
  67.     } 
  68.  
  69.     Random r =  new Random(); 
  70.  
  71.     @Override 
  72.     public void onClick(Component component) { 
  73.         if (component == next){ 
  74.             //点击的是下一个 --- 换一个girl的信息 
  75.             //从集合中获取一个随机的girl的信息 
  76.  
  77.             //获取一个随机索引 
  78.             int randomIndex = r.nextInt(list.size()); 
  79.             //通过随机索引获取随机girl信息 
  80.             GirlFriend girlFriend = list.get(randomIndex); 
  81.             //把随机出来的信息设置到界面当中 
  82.             img.setImageAndDecodeBounds(girlFriend.getPhotoID()); 
  83.             name.setText("姓名:" + girlFriend.getName()); 
  84.             age.setText("年龄:" + girlFriend.getAge()); 
  85.             address.setText("地址:" + girlFriend.getAddress()); 
  86.  
  87.  
  88.         }else if (component == get){ 
  89.             //获取联系方式 
  90.             //扩展:可以跳转到界面让用户充值界面,充值后才能看到girl信息 
  91.         } 
  92.     } 

运行:

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

点击“下一个”

HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区
HarmonyOS实战—实现相亲APP-鸿蒙HarmonyOS技术社区

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

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-03-30 09:45:07

鸿蒙HarmonyOS应用开发

2021-03-17 09:35:09

鸿蒙HarmonyOS应用开发

2021-03-26 09:35:35

鸿蒙HarmonyOS应用开发

2021-03-31 15:49:34

鸿蒙HarmonyOS应用

2015-09-18 10:44:54

大数据相亲

2021-08-10 15:37:34

鸿蒙HarmonyOS应用

2021-01-14 09:50:26

鸿蒙HarmonyOSAPP

2021-01-18 13:17:04

鸿蒙HarmonyOSAPP

2020-11-05 10:05:25

App

2022-07-28 14:31:04

canvas鸿蒙

2021-09-06 15:31:01

鸿蒙HarmonyOS应用

2021-09-13 15:17:28

鸿蒙HarmonyOS应用

2021-07-05 14:29:28

鸿蒙HarmonyOS应用

2022-09-01 11:04:47

PythonApp

2022-06-09 14:08:34

多设备协同鸿蒙

2022-07-12 17:33:00

消息定时提醒鸿蒙

2022-07-28 14:12:31

动画API鸿蒙

2022-06-29 14:06:54

canvas鸿蒙

2022-07-01 17:14:03

消息通知鸿蒙

2010-12-10 11:26:56

“相亲式”招聘
点赞
收藏

51CTO技术栈公众号