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

相关文章

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

Android与iOS设备MAC地址生成原理及Java实现详解

《Android与iOS设备MAC地址生成原理及Java实现详解》在无线网络通信中,MAC(MediaAccessControl)地址是设备的唯一网络标识符,本文主要介绍了Android与iOS设备M... 目录引言1. MAC地址基础1.1 MAC地址的组成1.2 MAC地址的分类2. android与I

Android 实现一个隐私弹窗功能

《Android实现一个隐私弹窗功能》:本文主要介绍Android实现一个隐私弹窗功能,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 效果图如下:1. 设置同意、退出、点击用户协议、点击隐私协议的函数参数2. 《用户协议》、《隐私政策》设置成可点击的,且颜色要区分出来res/l

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android 12解决push framework.jar无法开机的方法小结

《Android12解决pushframework.jar无法开机的方法小结》:本文主要介绍在Android12中解决pushframework.jar无法开机的方法,包括编译指令、框架层和s... 目录1. android 编译指令1.1 framework层的编译指令1.2 替换framework.ja

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

C#如何调用C++库

《C#如何调用C++库》:本文主要介绍C#如何调用C++库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录方法一:使用P/Invoke1. 导出C++函数2. 定义P/Invoke签名3. 调用C++函数方法二:使用C++/CLI作为桥接1. 创建C++/CL