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

相关文章

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局

Android ViewBinding使用流程

《AndroidViewBinding使用流程》AndroidViewBinding是Jetpack组件,替代findViewById,提供类型安全、空安全和编译时检查,代码简洁且性能优化,相比Da... 目录一、核心概念二、ViewBinding优点三、使用流程1. 启用 ViewBinding (模块级

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性

go rate 原生标准限速库的使用

《gorate原生标准限速库的使用》本文主要介绍了Go标准库golang.org/x/time/rate实现限流,采用令牌桶算法控制请求速率,提供Allow/Reserve/Wait方法,具有一定... 目录介绍安装API介绍rate.NewLimiter:创建限流器limiter.Allow():请求是否

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现