native封装卡片 react_React Native 基于画板简析封装安卓原生UI

1、创建 ViewManager 的子类

2、实现方法 createViewInstance

@Override

protected DrawCanvasView createViewInstance(ThemedReactContext reactContext) {

this.mContext = reactContext;

return new DrawCanvasView(reactContext.getApplicationContext(), reactContext);

}

3、通过 @ReactProp 注解导出属性的设置方法

@ReactProp注解必须包含一个字符串类型的参数name。这个参数指定了对应属性在JavaScript 端的名字。

@ReactProp(name = PROP_DRAW)

public void setCanvasType(final DrawCanvasView drawCanvasView, boolean type) {

System.out.println(TAG + " " + type);

if (type) {

//代表老师,可以绘制画板

drawCanvasView.setCanvasType(CanvasType.CAN_DRAW);

} else {

//代表学生,可以看画板,不能绘制

drawCanvasView.setCanvasType(CanvasType.CAN_SHOW);

}

}

4、注册 ViewManager

//DrawCanvasPackage.java

@Override

public List createViewManagers(ReactApplicationContext reactContext) {

return Arrays.asList(

new DrawCanvasManager()

);

}

5、实现对应的 JavaScript 模块

//DrawCanvasView.js

importReact, {Component,PropTypes}from'react';

import{requireNativeComponent,View}from'react-native';

export default classDrawCanvasViewextendsComponent{

constructor(props) {

super(props);

};

_onDraw=(event)=> {

if(this.props.onDraw) {

this.props.onDraw(event.nativeEvent);

}

}

_onDrawUp=(event)=>{

if(this.props.onDrawUp){

this.props.onDrawUp(event.nativeEvent);

}

}

_onMenuClick=(event)=>{

if(this.props.onMenuClick){

this.props.onMenuClick(event.nativeEvent);

}

}

setNativeProps(nativeProps) {

this._root.setNativeProps(nativeProps);

}

loadMaterial= (material) => {

this.setNativeProps({material: material});

}

sendCommand= (holder) => {

this.setNativeProps({send_command: holder});

}

_assignRoot= (component) => {

this._root= component;

}

render() {

constnativeProps= Object.assign({},this.props);

Object.assign(nativeProps, {

style:nativeProps.style,

loadMaterial:this.loadMaterial,

sendCommand:this.sendCommand,

onDraw:this._onDraw,

onDrawUp:this._onDrawUp,

onMenuClick:this._onMenuClick,

})

return(

ref={this._assignRoot}

{...nativeProps}

/>

)

}

}

DrawCanvasView.propTypes={

...View.propTypes,

material:PropTypes.func,

send_command:PropTypes.func,

onDraw:PropTypes.func,

onDrawUp:PropTypes.func,

can_draw:PropTypes.bool,

onMenuClick:PropTypes.func,

}

constRCTDrawCanvasView=requireNativeComponent("DrawCanvasView",DrawCanvasView,null)

6、自定义事件注册

对于用户的操作,例如绘制画板,缩放,拖拽,JS端需要响应用户的操作,所以需要原生视图向JS端发送事件,传递数据。

·列举注册事件

//PaintView.java

public enumEvents {

EVENT_ON_DRAW("onDraw"),

EVENT_ON_DRAW_UP("onDrawUp"),

EVENT_MENU_CLICK("onMenuClick");

private finalStringmName;

Events(finalString name) {

mName= name;

}

@Override

publicStringtoString() {

returnmName;

}

}

·导出自定义事件

//DrawCanvasManager.java

@Override

@Nullable

publicMapgetExportedCustomDirectEventTypeConstants

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值