react 还能用吗和createjs能一起用吗

    编写自定义插件需要继承ReactContextBaseJavaModule和实现ReactPackage接口, 2018WEB前端React Native 自定义插件,具体实现步骤如下:
  1. 继承ReactContextBaseJavaModule接口
  public class IntentModule extends ReactContextBaseJavaModule
  2. 重写 getName方法,暴露给JS端调用名
  @Override
  public String getName() {
  return &IntentModule&;
  3. 给暴露给JS的方法添加 @ReactMethod 注解,且方法的返回值只能是void
  @ReactMethod
  public void backActivity(int count) {
  if (count & 0) {
  Activity currentActivity = getCurrentActivity();
  currentActivity.finish();
  } catch (Exception e) {
  e.printStackTrace();
  4.实现ReactPackage接口
  public class IntentPackage implements ReactPackage {
  @Override
  public List createNativeModules(ReactApplicationContext reactContext) {
  return Arrays.asList(
  new IntentModule(reactContext)
  @Override
  public List createJSModules() {
  return Collections.emptyList();
  @Override
  public List createViewManagers(ReactApplicationContext reactContext) {
  return Collections.emptyList();
  5.在Application中注册IntentPackage
  @Override
  protected List getPackages() {
  return Arrays.asList(
  new MainReactPackage(),
  new IntentPackage()
  6.JavaScript调用IntentModule的backActivity方法
  NativeModules.IntentModule.backActivity();
  2018WEB前端React Native 自定义插件,还有不懂之处的话,可以点击弹窗联系我们,免费领取长沙尚学堂最新WEB前端教学视频,学习更多更深入的知识!
  推荐阅读:
主讲:马士兵类型:高级教程
主讲:马士兵类型:中级教程
主讲:高淇类型:初级教程
主讲:纪永强类型:初级教程
主讲:徐一涵类型:初级教程
微信公众号createjs - 问题 - SegmentFaultcreatejs初学-创建一个button - CSDN博客
createjs初学-创建一个button
在createjs中创建button是用ButtonHelper,实际上还要用到Sprite和SpriteSheet这两个类。下面是一个最简单的button。
var data={
images:["out.png","down.png"],
[0,0,135,43,0],
[0,0,135,43,1]
animations:{
var sheet=new createjs.SpriteSheet(data);
var sprite=new createjs.Sprite(sheet);
var helper=new createjs.ButtonHelper(sprite,"out","out","down");
stage.addChild(sprite);
一共有四部分,data为spriteSheet提供数据,由images,frames和animations组成。
images是一组图片,可以是html图片,也可以是图片的uri
images: [image1, "path/to/image2.png"],
frames用来定义每一帧,有两种数据格式
1.所有帧的大小都是相同的,根据宽高,帧的索引从左到右,从上向下排列
: {width:64, height:64, count:20, regX: 32, regY:64, spacing:0, margin:0}
2.图片是不同的尺寸,前四个参数分别表示x,y,width,height,第五个imageIndex表示上面images数组中的索引,默认是0。最后连个参数表示帧的注册位置。
[64, 0, 96, 64],
[0, 0, 64, 64, 1, 32, 32]
animations指定帧动画和动画的名字,有3种格式,具体见API
在button的例子很简单,指定了一个”out”,就是显示第一帧,一个”down”就是显示第二帧。
然后根据data创建了一个spriteSheet
再用spriteSheet创建了一个sprite
创建ButtonHelper的时候把sprite传了进去,ButtonHelper并不是一个显示对象,最后需要把sprite添加到舞台上,然而Buttonhelper的引用应该保持,以免被垃圾回收。
[outLabel="out"]
[overLabel="over"]
[downLabel="down"]
[play=false] [hitArea]
[hitLabel] )
构造函数中第一个参数是sprite,第二个指定out状态显示的动画的名字,上面用的事”out”,默认也是”out”,也可以用其他的值,只要和data里面的名字对应上。
后两个参数也是一样。
需要注意的是,默认状态下并不启用over状态,除非你通过enableMouseOver来设定。
本文已收录于以下专栏:
相关文章推荐
var button = new createjs.Container();
//定义按钮
var tid = this.
var reck2 = new createjs.Shape()...
preloadJS是没有包含在easelJS库中,使用的话去官网下载一下就好了
在学习了createjs一段时间以后,自己做了一个打豆豆小游戏。以前玩过flash版的,非常喜欢,于是就自己做了一个。下面是最终的效果图:
游戏规则:
点击空白方格,在方格所在的十字上,相同颜色的...
Three businesses failed tobacco compliance checks Monday that were supervised by the Bismarck Police...
图:互联网大会有中小企业的半边天    月月有新事,日日有奇闻。8.17~19日这三天,正是2010中国互联网大会隆重召开的日子,却因为新浪、搜狐两大门户的联袂缺席而变得非比寻常。连某网友都感叹,本届...
Socket共有5种I/O模型:,它们包括:
select(选择)、WSA
Select(异步选择)、WSA
Select(事件选择)、o...
1.网站测试工具
(1)http://www.webpagetest.org/2.移动端点击不要绑定click
因为有的设备click的触发有延迟3.实时监听input值改变:html5事件 on...
1.前两天写了个dome,但是长列表滚动起来特别卡。同样是在我的手机上跑官方dome里的滚动很流畅。
第4章 对象
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)React Native 中调用原生 android 模块 Toast 例子及说明
react-native-android-toast react-native 调用原生 android 模块 Toast 学习笔记 参考官方文档初始化一个react-native项目
react-native-android-toast
react-native 调用原生 android 模块 Toast 学习笔记
参考官方文档初始化一个react-native项目
react-native init androidToast
生成如下目录:
运行命令查看项目 react-native run-android 如图:
接入Android原生模块
按照官方的说法,第一步需要创建一个java类 本例中为:ToastModule ,并继承 ReactContextBaseJavaModule ,然后复写 getName() 方法,其返回值,就是在 react-native 中引用的 组件名称
复写 getConstants() 方法可以返回一些 常量 用于react-native中调用,官方文档中 return &ToastAndroid& 这个名称在原生的组件中已经存在,返回相同的名称将会冲突,so:改个名字吧!!
@ReactMethod 注解:用于java返回一个 react-native 中可调用的 方法 ,其不能有返回值所以使用 void
注册模块:创建java类 本例中为:ExampleReactPackage ,实现 ReactPackage 接口
复写createJSModules() , createViewManagers() 方法,返回 Collections.emptyList() 空集合
createNativeModules() 方法中添加我们需注册的模块对象, new ToastModule() ,并返回模块集合
添加已注册模块对象到返回集合中,向react-native抛出模块,如:第三步 在react-native中调用,如:第四步 android目录结构
注意:引入包的名称不要弄错了 Java & ReactNative 基本类型对照
Boolean Bool
Integer Number
Double Number
Float Number
String String
Callback function
ReadableMap Object
ReadableArray Array
第一步:创建模块类 在androidtoast目录下,创建一个ToastModule.java的类 package com. //包名import android.widget.T //引入调用的类import com.facebook.react.bridge.ReactApplicationCimport com.facebook.react.bridge.ReactContextBaseJavaMimport com.facebook.react.bridge.ReactMimport com.facebook.react.uimanager.IllegalViewOperationEimport java.util.Mimport java.util.HashMpublic class ToastModule extends ReactContextBaseJavaModule { private static final String DURATION_SHORT_KEY = &SHORT&; private static final String DURATION_LONG_KEY = &LONG&; public ToastModule(ReactApplicationContext reactContext) { super(reactContext); } // 复写方法,返回react-native中调用的 组件名 @Override public String getName() { return &ToastNative&; } // 复写方法,返回常量 @Override public Map&String, Object& getConstants() { final Map&String, Object& constants = new HashMap&&(); constants.put(DURATION_SHORT_KEY, Toast.LENGTH_SHORT); constants.put(DURATION_LONG_KEY, Toast.LENGTH_LONG); } // 使用 @ReactMethod注解返回react-native中可调用的 方法 @ReactMethod public void show(String message, int duration) { Toast.makeText(getReactApplicationContext(), message, duration).show(); }} 第二步:注册模块 在androidtoast目录下,创建一个ExampleReactPackage.java的类 package com.import android.widget.Timport com.facebook.react.bridge.NativeMimport com.facebook.react.bridge.ReactApplicationCimport com.facebook.react.bridge.ReactMimport com.facebook.react.ReactPimport com.facebook.react.bridge.JavaScriptMimport com.facebook.react.uimanager.ViewMimport java.util.ArrayLimport java.util.Cimport java.util.Lpublic class ExampleReactPackage implements ReactPackage { @Override public List&Class&? extends JavaScriptModule&& createJSModules() { return Collections.emptyList(); } @Override public List&ViewManager& createViewManagers(ReactApplicationContext reactContext) { return Collections.emptyList(); } @Override public List&NativeModule& createNativeModules( ReactApplicationContext reactContext) { List&NativeModule& modules = new ArrayList&&(); modules.add(new ToastModule(reactContext)); }} 第三步:添加注册类
添加到 MainApplication.java 中的 getPackages() 方法中
@Overrideprotected List&ReactPackage& getPackages() { return Arrays.&ReactPackage&asList( new MainReactPackage(), // 这个是自动创建 new ExampleReactPackage() // 这个类是我们创建的 );}
项目结构如下:
Java部分的代码就结束了,再次提醒下:包名啊!!不要弄错了!!! 第四步:修改react-native代码引入原生模块 修改index.android.js
引入react-native所需模块 NativeModules
获取导出组件 NativeModules.ToastNative
调用方法 show()
修改了下index.android.js文件,代码如下: /** * Sample React Native App * /facebook/react-native * @flow */import React, { Component } from 'react';import { AppRegistry, StyleSheet, Text, View, TouchableOpacity, NativeModules} from 'react-native';let toast = NativeModules.ToastNexport default class androidToast extends Component { render() { return ( &View style={styles.container}& &Text style={styles.title}&react-native 调用android原生模块&/Text& &TouchableOpacity onPress={()=&{ toast.show('Toast message',toast.SHORT); }}& &Text style={styles.btn}&Click Me&/Text& &/TouchableOpacity& &/View& ); }}const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#F5FCFF', }, title:{ fontSize:16, }, btn:{ fontSize:16, paddingVertical:7, paddingHorizontal:10, borderColor:'#f00', borderWidth:1, borderRadius:5, marginTop:10, color:'#f00' }});AppRegistry.registerComponent('androidToast', () =& androidToast); 运行程序 react-native run-android 效果如下:
react-native回调函数
*java中提供了一个 Callback 的数据类型对应了react-native中的 function *
具体操作就是在@ReactMethod注解的返回函数中 添加 类型 为 Callback 的参数,并通过 invoke(...params) 调用
RN中通过调用show方法时提供对应的回调函数就可以了,
修改 ToastModule.java 代码中 show() 方法,添加回调
注意引包!! import com.facebook.react.bridge.C // 说明下:count,flag是我自定义的变量@ReactMethodpublic void show(String message, int duration ,Callback successCallback, Callback errorCallback) { Toast.makeText(getReactApplicationContext(), message, duration).show(); // 通过invoke调用,随便你传参 if(flag) successCallback.invoke(&success&, ++count); else errorCallback.invoke(&error&, ++count); flag = !}
修改 index.android.js 中调用函数
&TouchableOpacity onPress={()=&{ toast.show('Toast message',toast.SHORT,(message,count)=&{console.log(&==&,message,count)},(message,count)=&{console.log(&++&,message,count)});}}&
,试试看吧~~
触发事件 首先我们定义一个发送事件的方法 private void sendEvent(ReactContext reactContext, String eventName, @Nullable WritableMap params){ reactContext .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit(eventName, params);} 引包 import javax.annotation.Nimport com.facebook.react.bridge.Aimport com.facebook.react.bridge.WritableMimport com.facebook.react.bridge.ReactCimport com.facebook.react.modules.core.DeviceEventManagerM
继续改造 show 方法,添加参数,并调用预先定义的方法
// 静态方法WritableMap map = Arguments.createMap();map.putBoolean(&boolean&,true);map.putDouble(&double&,0.003);map.putString(&string&,&string&);sendEvent(this.reactContext, &eventName&,map);
改造 index.android.js 啦 ,添加事件监听,这里的 eventName 就是我们 sendEvent 中定义的事件名称
componentWillMount(){ DeviceEventEmitter.addListener('eventName',(e)=&{ console.log(e) });} 效果如下:
曾走过的路
曾想在返回的方法中定义一个 Object 类型的变量,但pa! 报错了!!不支持滴,请查看类型对应表格
cloudn't find argument class : Object 参照官方文档时,各种类找不到,瞬间醉了! # 百度吧,一般不管用# stackoverflow,Google 有时可以搜到,尼玛!英文。。。# github# react-native 源码 !!!这里面有个`ReactAndroid`的目录就是各种`Java`类啦 react-native/ReactAndroid/src/main/java/com/facebook/ /facebook/react-native课程加载中...

我要回帖

更多关于 现在还能不能用react 的文章

 

随机推荐