From 4a0f5139f0b58b21de07688b0c34eec205924005 Mon Sep 17 00:00:00 2001 From: hillyoung <389181073@qq.com> Date: Mon, 15 May 2017 15:34:53 +0800 Subject: [PATCH 1/3] Added a clickable event to Line, Bar, Pie --- .gitignore | 1 + example/.flowconfig | 8 +- example/.gitignore | 1 - example/android/app/build.gradle | 8 +- .../android/app/src/main/AndroidManifest.xml | 53 ++-- .../java/com/example/ExampleReactPackage.java | 39 +++ .../main/java/com/example/HomeActivity.java | 52 ++++ .../java/com/example/MainApplication.java | 33 +- .../src/main/java/com/example/RNActivity.java | 113 +++++++ .../src/main/java/com/example/RNBridge.java | 40 +++ .../app/src/main/java/com/example/RNHost.java | 40 +++ .../app/src/main/res/layout/activity_home.xml | 41 +++ .../app/src/main/res/layout/content_home.xml | 16 + .../app/src/main/res/values-v21/styles.xml | 1 + .../app/src/main/res/values-w820dp/dimens.xml | 6 + .../app/src/main/res/values/dimens.xml | 6 + .../app/src/main/res/values/strings.xml | 1 + .../app/src/main/res/values/styles.xml | 4 + example/android/build.gradle | 2 +- .../gradle/wrapper/gradle-wrapper.properties | 2 +- example/examples.js | 37 +++ example/examples/Circle.js | 118 +++++++ example/examples/Clipping.js | 208 +++++++++++++ example/examples/Ellipse.js | 76 +++++ example/examples/G.js | 172 +++++++++++ example/examples/Gradients.js | 290 ++++++++++++++++++ example/examples/Image.js | 116 +++++++ example/examples/Line.js | 88 ++++++ example/examples/PanResponder.js | 121 ++++++++ example/examples/Path.js | 123 ++++++++ example/examples/Polygon.js | 104 +++++++ example/examples/Polyline.js | 96 ++++++ example/examples/Rect.js | 139 +++++++++ example/examples/Reusable.js | 151 +++++++++ example/examples/Stroking.js | 150 +++++++++ example/examples/Svg.js | 221 +++++++++++++ example/examples/Text.js | 223 ++++++++++++++ example/examples/TouchEvents.js | 132 ++++++++ example/image.jpg | Bin 0 -> 13303 bytes example/index.android.js | 260 ++++++++++++++++ example/ios/example/Info.plist | 2 - example/main.js | 265 ++++++++++++++++ example/package.json | 5 +- example/src/App.js | 7 +- example/src/bar/BarChartColumnBasic.js | 4 +- example/src/pie/PieChartBasic.js | 5 +- example/src/stockline/StockLineChartBasic.js | 1 + 47 files changed, 3531 insertions(+), 50 deletions(-) create mode 100644 example/android/app/src/main/java/com/example/ExampleReactPackage.java create mode 100644 example/android/app/src/main/java/com/example/HomeActivity.java create mode 100644 example/android/app/src/main/java/com/example/RNActivity.java create mode 100644 example/android/app/src/main/java/com/example/RNBridge.java create mode 100644 example/android/app/src/main/java/com/example/RNHost.java create mode 100644 example/android/app/src/main/res/layout/activity_home.xml create mode 100644 example/android/app/src/main/res/layout/content_home.xml create mode 100644 example/android/app/src/main/res/values-v21/styles.xml create mode 100644 example/android/app/src/main/res/values-w820dp/dimens.xml create mode 100644 example/android/app/src/main/res/values/dimens.xml create mode 100644 example/examples.js create mode 100644 example/examples/Circle.js create mode 100644 example/examples/Clipping.js create mode 100644 example/examples/Ellipse.js create mode 100644 example/examples/G.js create mode 100644 example/examples/Gradients.js create mode 100644 example/examples/Image.js create mode 100644 example/examples/Line.js create mode 100644 example/examples/PanResponder.js create mode 100644 example/examples/Path.js create mode 100644 example/examples/Polygon.js create mode 100644 example/examples/Polyline.js create mode 100644 example/examples/Rect.js create mode 100644 example/examples/Reusable.js create mode 100644 example/examples/Stroking.js create mode 100644 example/examples/Svg.js create mode 100644 example/examples/Text.js create mode 100644 example/examples/TouchEvents.js create mode 100644 example/image.jpg create mode 100644 example/main.js diff --git a/.gitignore b/.gitignore index bda3a4e..2af2cd6 100755 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ coverage.html # Dependency directory node_modules +example/node_modules/ # Example build directory example/dist diff --git a/example/.flowconfig b/example/.flowconfig index b38ea97..c693a48 100644 --- a/example/.flowconfig +++ b/example/.flowconfig @@ -22,6 +22,8 @@ node_modules/react-native/flow flow/ [options] +emoji=true + module.system=haste experimental.strict_type_args=true @@ -34,11 +36,11 @@ suppress_type=$FlowIssue suppress_type=$FlowFixMe suppress_type=$FixMe -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-7]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-7]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ +suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(>=0\\.\\(3[0-8]\\|[1-2][0-9]\\|[0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\) +suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(>=0\\.\\(3[0-8]\\|1[0-9]\\|[1-2][0-9]\\).[0-9]\\)? *\\(site=[a-z,_]*react_native[a-z,_]*\\)?)\\)?:? #[0-9]+ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy unsafe.enable_getters_and_setters=true [version] -^0.37.0 +^0.38.0 diff --git a/example/.gitignore b/example/.gitignore index 8fce639..10be197 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -39,7 +39,6 @@ yarn-error.log # BUCK buck-out/ \.buckd/ -android/app/libs *.keystore # fastlane diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle index 63faa5a..54ecf56 100644 --- a/example/android/app/build.gradle +++ b/example/android/app/build.gradle @@ -115,7 +115,7 @@ android { variant.outputs.each { output -> // For each separate APK per architecture, set a unique version code as described here: // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits - def versionCodes = ["armeabi-v7a":1, "x86":2] + def versionCodes = ["armeabi-v7a": 1, "x86": 2] def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = @@ -128,8 +128,10 @@ android { dependencies { compile project(':react-native-svg') compile fileTree(dir: "libs", include: ["*.jar"]) - compile "com.android.support:appcompat-v7:23.0.1" - compile "com.facebook.react:react-native:+" // From node_modules + // From node_modules + compile 'com.android.support:appcompat-v7:23.4.0' + compile 'com.facebook.react:react-native:+' + compile 'com.android.support:design:23.4.0' } // Run this once to be able to run the application with BUCK diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml index 677f075..4a45c4f 100644 --- a/example/android/app/src/main/AndroidManifest.xml +++ b/example/android/app/src/main/AndroidManifest.xml @@ -1,31 +1,48 @@ + - - - + + + + + + + - - - - - - - + android:theme="@style/AppTheme"> + + + + + + + + + + + + - + \ No newline at end of file diff --git a/example/android/app/src/main/java/com/example/ExampleReactPackage.java b/example/android/app/src/main/java/com/example/ExampleReactPackage.java new file mode 100644 index 0000000..a3d0931 --- /dev/null +++ b/example/android/app/src/main/java/com/example/ExampleReactPackage.java @@ -0,0 +1,39 @@ +package com.example; + +/** + * Created by young on 2017/5/10. + */ + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.JavaScriptModule; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ExampleReactPackage implements ReactPackage { + + @Override + public List> createJSModules() { + return Collections.emptyList(); + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } + + @Override + public List createNativeModules( + ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + + modules.add(new RNBridge(reactContext)); + + return modules; + } + +} diff --git a/example/android/app/src/main/java/com/example/HomeActivity.java b/example/android/app/src/main/java/com/example/HomeActivity.java new file mode 100644 index 0000000..43d566d --- /dev/null +++ b/example/android/app/src/main/java/com/example/HomeActivity.java @@ -0,0 +1,52 @@ +package com.example; + +import android.content.Intent; +import android.os.Bundle; +import android.support.design.widget.FloatingActionButton; +import android.support.design.widget.Snackbar; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.View; +import android.widget.Button; + +import java.io.IOError; + +public class HomeActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home); + Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); + fab.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) + .setAction("Action", null).show(); + } + }); + + Button bt = (Button) findViewById(R.id.button); + bt.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Log.i("匿名内部类", "点击事件"); + + + try { + Intent intent = new Intent(); + intent.setClass(HomeActivity.this, MainActivity.class); + startActivity(intent); + } catch (IOError error) { + error.printStackTrace(); + } + + } + }); + } + +} diff --git a/example/android/app/src/main/java/com/example/MainApplication.java b/example/android/app/src/main/java/com/example/MainApplication.java index 22e0eab..bf40d84 100644 --- a/example/android/app/src/main/java/com/example/MainApplication.java +++ b/example/android/app/src/main/java/com/example/MainApplication.java @@ -1,7 +1,6 @@ package com.example; import android.app.Application; -import android.util.Log; import com.facebook.react.ReactApplication; import com.horcrux.svg.RNSvgPackage; @@ -16,22 +15,26 @@ public class MainApplication extends Application implements ReactApplication { - private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { - @Override - public boolean getUseDeveloperSupport() { - return BuildConfig.DEBUG; - } +// private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { +// @Override +// public boolean getUseDeveloperSupport() { +// return BuildConfig.DEBUG; +// } +// +// @Override +// protected List getPackages() { +// return Arrays.asList( +// new MainReactPackage(), +// new RNSvgPackage(), +// new ExampleReactPackage() +// ); +// } +// }; + + private final ReactNativeHost mReactNativeHost = new RNHost(this); - @Override - protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new RNSvgPackage() - ); - } - }; - @Override + @Override public ReactNativeHost getReactNativeHost() { return mReactNativeHost; } diff --git a/example/android/app/src/main/java/com/example/RNActivity.java b/example/android/app/src/main/java/com/example/RNActivity.java new file mode 100644 index 0000000..89d88d2 --- /dev/null +++ b/example/android/app/src/main/java/com/example/RNActivity.java @@ -0,0 +1,113 @@ +package com.example; + +import android.app.Activity; +import android.content.Intent; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.provider.Settings; +import android.util.Log; +import android.view.KeyEvent; + +import com.facebook.react.*; +import com.facebook.react.BuildConfig; +import com.facebook.react.common.LifecycleState; +import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler; +import com.facebook.react.shell.MainReactPackage; + +/** + * Created by young on 2017/5/10. + */ + +public class RNActivity extends Activity implements DefaultHardwareBackBtnHandler { + + private ReactRootView rnRootView; + private ReactInstanceManager rnInstanceManager; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + +// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { +// if (!Settings.canDrawOverlays(this)) { +// Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, +// Uri.parse("package:" + getPackageName())); +// startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE); +// } +// } + + rnRootView = new ReactRootView(this); + Log.i("加载RN模块", "测试"); + ReactInstanceManagerBuilder builder = ReactInstanceManager.builder().setApplication(getApplication()) + .setBundleAssetName("index.android.bundle") + .setJSMainModuleName("index.android") + .addPackage(new MainReactPackage()) + .setUseDeveloperSupport(true) + .setInitialLifecycleState(LifecycleState.RESUMED); + + RNHost host = (RNHost) ((ReactApplication) getApplication()).getReactNativeHost(); + + for (ReactPackage reactPackage : host.packages()) { + builder.addPackage(reactPackage); + } + + rnInstanceManager = builder.build(); + rnRootView.startReactApplication(rnInstanceManager, "example", null); + + setContentView(rnRootView); + } + + @Override + public void invokeDefaultOnBackPressed() { + super.onBackPressed(); + } + + + @Override + protected void onPause() { + super.onPause(); + + if (rnInstanceManager != null) { + rnInstanceManager.onHostPause(this); + } + } + + @Override + protected void onResume() { + super.onResume(); + + if (rnInstanceManager != null) { + rnInstanceManager.onHostResume(this, this); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + + if (rnInstanceManager != null) { + rnInstanceManager.onHostDestroy(this); + } + } + + @Override + public void onBackPressed() { + + if (rnInstanceManager != null) { + rnInstanceManager.onBackPressed(); + } else { + super.onBackPressed(); + } + } + + + @Override + public boolean onKeyUp(int keyCode, KeyEvent event) { + + if (keyCode == KeyEvent.KEYCODE_MENU && rnInstanceManager != null) { + rnInstanceManager.showDevOptionsDialog(); + return true; + } + return super.onKeyUp(keyCode, event); + } +} diff --git a/example/android/app/src/main/java/com/example/RNBridge.java b/example/android/app/src/main/java/com/example/RNBridge.java new file mode 100644 index 0000000..16c47a9 --- /dev/null +++ b/example/android/app/src/main/java/com/example/RNBridge.java @@ -0,0 +1,40 @@ +package com.example; + +/** + * Created by young on 2017/5/10. + */ + + +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; + +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Nullable; + +public class RNBridge extends ReactContextBaseJavaModule { + + public RNBridge(ReactApplicationContext reactContext) { + super(reactContext); + } + + @Override + public String getName() { + return "RNBridge"; + } + + @Nullable + @Override + public Map getConstants() { + + final Map constants = new HashMap<>(); + constants.put("abc", "ABC"); + constants.put("bcd", "BCD"); + + return constants; + } +} diff --git a/example/android/app/src/main/java/com/example/RNHost.java b/example/android/app/src/main/java/com/example/RNHost.java new file mode 100644 index 0000000..80160b9 --- /dev/null +++ b/example/android/app/src/main/java/com/example/RNHost.java @@ -0,0 +1,40 @@ +package com.example; + +import android.app.Application; + +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; +import com.horcrux.svg.RNSvgPackage; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by young on 2017/5/10. + */ + +public class RNHost extends ReactNativeHost { + + public RNHost(Application application) { + super(application); + } + + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new RNSvgPackage(), + new ExampleReactPackage() + ); + } + + public List packages() { + return this.getPackages(); + } +} diff --git a/example/android/app/src/main/res/layout/activity_home.xml b/example/android/app/src/main/res/layout/activity_home.xml new file mode 100644 index 0000000..365fef0 --- /dev/null +++ b/example/android/app/src/main/res/layout/activity_home.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + +