ReactNative调用android原生View

2024-05-06 14:18

本文主要是介绍ReactNative调用android原生View,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

RN开发过程中,React Native是将原生控件封装桥接成JS组件来使用的,这保证了其性能的高效性。但是有时候官方封装的常用组件不能满足需求,就需要结合原生UI使用,例如:对原生实现的UI复用;复杂UI仍然需要原生自定义View实现。接下来就简单记录下RN开发过程中调用原生UI的流程。

例如下面这个UI效果,就需要用到Android原生自定义View实现:
1.png

以上图实现效果为例,分别从Android端和RN端说明。

Android端

1. 创建自定义控件CircleMenu;

public class CircleMenu extends View {private Context mContext;/** 点击外面 */public static final int DL_TOUCH_OUTSIDE = -2;/** 点击中间点 */public static final int DL_TOUCH_CENTER = -1;/** 中心点的坐标X */private float mCoreX;/** 中心点的坐标Y */private float mCoreY;/** 是否有中心按钮 */private boolean mHasCoreMenu;/** 中心按钮的默认背景 */private int mCoreMenuNormalBackgroundColor;/** 中间按钮的描边颜色 */private int mCoreMenuStrokeColor;/** 中间按钮的描边边框大小 */private float mCoreMenuStrokeSize;/** 中间按钮选中时的背景颜色 */private int mCoreMenuSelectedBackgroundColor;/** 中心按钮圆形半径 */private float mCoreMenuRoundRadius;/** 菜单数量 */private int mRoundMenuNumber;/** 菜单偏移角度 */private float mRoundMenuDeviationDegree;/** 菜单图片 */private ArrayList<Bitmap> mRoundMenuDrawableList = new ArrayList<>();/** 是否画每个菜单扇形到中心点的直线 */private boolean mIsDrawLineToCenter;/** 菜单正常背景颜色 */private int mRoundMenuNormalBackgroundColor;/** 菜单点击背景颜色 */private int mRoundMenuSelectedBackgroundColor;/** 菜单描边颜色 */private int mRoundMenuStrokeColor;/** 菜单描边宽度 */private float mRoundMenuStrokeSize;/** 菜单图片与中心点的距离 百分数 */private float mRoundMenuDistance;/** 点击状态 -2是无点击,-1是点击中心圆,其他是点击菜单 */private int onClickState = DL_TOUCH_OUTSIDE;/** 记录按下时间,超过预设时间算长按按钮 */private long mTouchTime;public CircleMenu(Context context) {super(context);init(context, null);}public CircleMenu(Context context, @Nullable AttributeSet attrs) {super(context, attrs);init(context, attrs);}public CircleMenu(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs);}/*** 初始化数据* @param context* @param attrs*/private void init(Context context, @Nullable AttributeSet attrs) {mContext = context;// 加载默认资源final Resources res = getResources();final boolean defaultHasCoreMenu = res.getBoolean(R.bool.default_has_core_menu);final int defaultCoreMenuNormalBackgroundColor = res.getColor(R.color.default_core_menu_normal_background_color);final int defaultCoreMenuStrokeColor = res.getColor(R.color.default_core_menu_stroke_color);final float defaultCoreMenuStrokeSize = res.getDimension(R.dimen.default_core_menu_stroke_size);final int defaultCoreMenuSelectedBackgroundColor = res.getColor(R.color.default_core_menu_selected_background_color);final float defaultCoreMenuRoundRadius = res.getDimension(R.dimen.default_core_menu_round_radius);final int defaultRoundMenuNumber = res.getInteger(R.integer.default_round_menu_number);final int defaultRoundMenuDeviationDegree = res.getInteger(R.integer.default_round_menu_deviation_degree);final boolean defaultIsDrawLineToCenter = res.getBoolean(R.bool.default_is_draw_line_to_center);final int defaultRoundMenuNormalBackgroundColor = res.getColor

这篇关于ReactNative调用android原生View的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964587

相关文章

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

redis防止短信恶意调用的实现

《redis防止短信恶意调用的实现》本文主要介绍了在场景登录或注册接口中使用短信验证码时遇到的恶意调用问题,并通过使用Redis分布式锁来解决,具有一定的参考价值,感兴趣的可以了解一下... 目录1.场景2.排查3.解决方案3.1 Redis锁实现3.2 方法调用1.场景登录或注册接口中,使用短信验证码场

使用C/C++调用libcurl调试消息的方式

《使用C/C++调用libcurl调试消息的方式》在使用C/C++调用libcurl进行HTTP请求时,有时我们需要查看请求的/应答消息的内容(包括请求头和请求体)以方便调试,libcurl提供了多种... 目录1. libcurl 调试工具简介2. 输出请求消息使用 CURLOPT_VERBOSE使用 C