HarmonyOS实现Java端类似Nine-Patch气泡聊天框代码

 更新时间:2024年07月13日 11:08:05   作者:鱼弦CTO  
在HarmonyOS Java端实现气泡聊天框,与Android 上的9图(Nine-Patch)有相似的实现方式,在HarmonyOS中,可以使用ShapeElement和ElementContainer来创建和管理可伸缩的气泡背景,下面提供一个简单的示例代码,可以在 HarmonyOS 中实现类似于Android的Nine-Patch气泡聊天框效果

在 HarmonyOS Java 端实现气泡聊天框,与 Android 上的9图(Nine-Patch)有相似的实现方式。在 HarmonyOS 中,可以使用 ShapeElement 和 ElementContainer 来创建和管理可伸缩的气泡背景。下面提供一个简单的示例代码,可以在 HarmonyOS 中实现类似于 Android 的 Nine-Patch 气泡聊天框效果。

Step 1: 创建一个 Nine-Patch 资源文件

首先,创建一个 Nine-Patch 图片资源。在 HarmonyOS 中,可以直接使用 Android Studio 工具生成 Nine-Patch 图像,并将其复制到 HarmonyOS 项目的 resources/base/media 文件夹中。

Step 2: 在 Java 代码中使用 ShapeElement

使用 ShapeElement 或者 PixelMapElement 来加载 Nine-Patch 图片资源,并设置给组件的背景。

import ohos.aafwk.ability.delegation.AbilityDelegatorRegistry;
import ohos.agp.components.*;
import ohos.agp.components.element.PixelMapElement;
import ohos.app.Context;
import ohos.media.image.PixelMap;

public class ChatBubble extends DirectionalLayout {
    private Context context;

    public ChatBubble(Context context) {
        super(context);
        this.context = context;
        init();
    }

    private void init() {
        // 设置布局方向
        setOrientation(VERTICAL);

        // 加载 Nine-Patch 图片资源
        PixelMapElement ninePatchElement = new PixelMapElement(getPixelMap("resources/base/media/bubble.9.png"));
        
        // 创建 Text 组件,用于显示聊天文本
        Text chatText = new Text(context);
        chatText.setText("Hello, this is a sample chat bubble!");
        chatText.setTextSize(50);
        chatText.setPadding(50, 20, 50, 20);
        
        // 将 Nine-Patch 背景设置给 Text 组件
        chatText.setBackground(ninePatchElement);

        // 将 Text 组件添加到当前布局
        addComponent(chatText);
    }

    private PixelMap getPixelMap(String path) {
        try {
            ResourceManager resourceManager = AbilityDelegatorRegistry.getAbilityDelegator().getAppContext().getResourceManager();
            if (resourceManager != null) {
                Resource resource = resourceManager.getRawFileEntry(path).openRawFile();
                return PixelMap.decodeStream(resource, null);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}

Step 3: 在布局文件或程序中使用 ChatBubble

在主界面或者其他地方实例化并使用 ChatBubble:

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.ComponentContainer;
import ohos.agp.window.service.Window;

public class MainAbility extends Ability {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setMainRoute(MainAbilitySlice.class.getName());
        
        // 获取窗口并设置内容视图
        Window window = getWindow();
        ComponentContainer rootLayout = (ComponentContainer) LayoutScatter.getInstance(this)
                .parse(ResourceTable.Layout_ability_main, null, false);

        // 实例化单个聊天气泡
        ChatBubble chatBubble = new ChatBubble(this);
        
        // 添加聊天气泡到根布局
        rootLayout.addComponent(chatBubble);

        // 设置窗口显示内容
        window.setUIContent(rootLayout);
    }
}

关键点解释

Nine-Patch 图片资源:

请确保你的项目中包含了正确格式的 Nine-Patch 图片,例如 bubble.9.png。可以通过 Android Studio 的 Draw 9-Patch 工具生成。

PixelMapElement:

使用 PixelMapElement 加载和展示 Nine-Patch 图片资源。

Text 组件背景:

将 PixelMapElement 设置为 Text 组件的背景,实现气泡效果。

总结

通过上述方法,可以在 HarmonyOS 中实现类似于 Android 的 Nine-Patch 气泡聊天框效果。

相关文章

  • SpringCloud feign服务熔断下的异常处理操作

    SpringCloud feign服务熔断下的异常处理操作

    这篇文章主要介绍了SpringCloud feign服务熔断下的异常处理操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java获取Jar、War包路径并生成可编辑修改的本地配置文件

    Java获取Jar、War包路径并生成可编辑修改的本地配置文件

    这篇文章主要给大家介绍了关于Java如何获取Jar、War包路径并生成可编辑修改的本地配置文件,文中通过代码介绍的非常详细,对大家学习或者使用Java具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Java中获取MongoDB连接的方法详解

    Java中获取MongoDB连接的方法详解

    这篇文章主要介绍了Java中获取MongoDB连接的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 解读yml文件中配置时间类型的转换方式

    解读yml文件中配置时间类型的转换方式

    这篇文章主要介绍了yml文件中配置时间类型的转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Spring AOP的五种通知方式代码实例

    Spring AOP的五种通知方式代码实例

    这篇文章主要介绍了Spring AOP的五种通知方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 快速解决code唯一码(java)的简便方法

    快速解决code唯一码(java)的简便方法

    下面小编就为大家带来一篇快速解决code唯一码(java)的简便方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Spring Cloud Alibaba Nacos两种检查机制

    Spring Cloud Alibaba Nacos两种检查机制

    这篇文章主要介绍了Spring Cloud Alibaba Nacos两种检查机制,作为注册中心不止提供了服务注册和服务发现功能,它还提供了服务可用性监测的机制,下面我们就一起进入文章了解具体详情吧
    2022-05-05
  • SpringBoot详细分析自动装配原理并实现starter

    SpringBoot详细分析自动装配原理并实现starter

    相对于传统意义上的Spring项目,SpringBoot具有开箱即用,简化配置,内置Tomcat等等等等一系列的特点。在这些特点中,最重要的两条就是约定优于配置和自动装配
    2022-07-07
  • 如何使用java修改文件所有者及其权限

    如何使用java修改文件所有者及其权限

    这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 教你怎么用Java操作Redis

    教你怎么用Java操作Redis

    今天带大家来学习怎么用Java操作Redis,文中有非常详细的介绍,对正在学习java的小伙伴们有很好的帮助,建议有redis基础并熟悉redis的基本数据类型命令的小伙伴学习,需要的朋友可以参考下
    2021-05-05

最新评论