Commit e76116ffae6cc97df9dfabdbf1529ec6ac348151

Authored by 韩亚云
0 parents

Ar提交

Showing 51 changed files with 1253 additions and 0 deletions
.gitignore 0 → 100644
  1 +++ a/.gitignore
  1 +*.iml
  2 +.gradle
  3 +/local.properties
  4 +/.idea/workspace.xml
  5 +/.idea/libraries
  6 +.DS_Store
  7 +/build
  8 +/captures
  9 +.externalNativeBuild
... ...
.idea/gradle.xml 0 → 100644
  1 +++ a/.idea/gradle.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="GradleSettings">
  4 + <option name="linkedExternalProjectsSettings">
  5 + <GradleProjectSettings>
  6 + <option name="distributionType" value="DEFAULT_WRAPPED" />
  7 + <option name="externalProjectPath" value="$PROJECT_DIR$" />
  8 + <option name="modules">
  9 + <set>
  10 + <option value="$PROJECT_DIR$" />
  11 + <option value="$PROJECT_DIR$/app" />
  12 + <option value="$PROJECT_DIR$/syar" />
  13 + </set>
  14 + </option>
  15 + <option name="resolveModulePerSourceSet" value="false" />
  16 + </GradleProjectSettings>
  17 + </option>
  18 + </component>
  19 +</project>
0 20 \ No newline at end of file
... ...
.idea/misc.xml 0 → 100644
  1 +++ a/.idea/misc.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="NullableNotNullManager">
  4 + <option name="myDefaultNullable" value="android.support.annotation.Nullable" />
  5 + <option name="myDefaultNotNull" value="android.support.annotation.NonNull" />
  6 + <option name="myNullables">
  7 + <value>
  8 + <list size="4">
  9 + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
  10 + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
  11 + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
  12 + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
  13 + </list>
  14 + </value>
  15 + </option>
  16 + <option name="myNotNulls">
  17 + <value>
  18 + <list size="4">
  19 + <item index="0" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
  20 + <item index="1" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
  21 + <item index="2" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
  22 + <item index="3" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
  23 + </list>
  24 + </value>
  25 + </option>
  26 + </component>
  27 + <component name="ProjectRootManager" version="2" languageLevel="JDK_1_7" project-jdk-name="1.8" project-jdk-type="JavaSDK">
  28 + <output url="file://$PROJECT_DIR$/build/classes" />
  29 + </component>
  30 + <component name="ProjectType">
  31 + <option name="id" value="Android" />
  32 + </component>
  33 + <component name="masterDetails">
  34 + <states>
  35 + <state key="ProjectJDKs.UI">
  36 + <settings>
  37 + <last-edited>1.8</last-edited>
  38 + <splitter-proportions>
  39 + <option name="proportions">
  40 + <list>
  41 + <option value="0.2" />
  42 + </list>
  43 + </option>
  44 + </splitter-proportions>
  45 + </settings>
  46 + </state>
  47 + </states>
  48 + </component>
  49 +</project>
0 50 \ No newline at end of file
... ...
.idea/modules.xml 0 → 100644
  1 +++ a/.idea/modules.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="ProjectModuleManager">
  4 + <modules>
  5 + <module fileurl="file://$PROJECT_DIR$/ArDemo.iml" filepath="$PROJECT_DIR$/ArDemo.iml" />
  6 + <module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
  7 + <module fileurl="file://$PROJECT_DIR$/syar/syar.iml" filepath="$PROJECT_DIR$/syar/syar.iml" />
  8 + </modules>
  9 + </component>
  10 +</project>
0 11 \ No newline at end of file
... ...
.idea/runConfigurations.xml 0 → 100644
  1 +++ a/.idea/runConfigurations.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="RunConfigurationProducerService">
  4 + <option name="ignoredProducers">
  5 + <set>
  6 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.AllInPackageGradleConfigurationProducer" />
  7 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestClassGradleConfigurationProducer" />
  8 + <option value="org.jetbrains.plugins.gradle.execution.test.runner.TestMethodGradleConfigurationProducer" />
  9 + </set>
  10 + </option>
  11 + </component>
  12 +</project>
0 13 \ No newline at end of file
... ...
.idea/vcs.xml 0 → 100644
  1 +++ a/.idea/vcs.xml
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<project version="4">
  3 + <component name="VcsDirectoryMappings">
  4 + <mapping directory="$PROJECT_DIR$" vcs="Git" />
  5 + </component>
  6 +</project>
0 7 \ No newline at end of file
... ...
app/.gitignore 0 → 100644
  1 +++ a/app/.gitignore
  1 +/build
... ...
app/build.gradle 0 → 100644
  1 +++ a/app/build.gradle
  1 +apply plugin: 'com.android.application'
  2 +
  3 +android {
  4 + compileSdkVersion 27
  5 + defaultConfig {
  6 + applicationId "com.cnlive.ardemo"
  7 + minSdkVersion 16
  8 + targetSdkVersion 27
  9 + versionCode 1
  10 + versionName "1.0"
  11 + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  12 + }
  13 + buildTypes {
  14 + release {
  15 + minifyEnabled false
  16 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  17 + }
  18 + }
  19 +}
  20 +
  21 +dependencies {
  22 + compile fileTree(dir: 'libs', include: ['*.jar'])
  23 + implementation 'com.android.support:appcompat-v7:27.1.0'
  24 + implementation 'com.android.support.constraint:constraint-layout:1.1.2'
  25 + testImplementation 'junit:junit:4.12'
  26 + androidTestImplementation 'com.android.support.test:runner:1.0.2'
  27 + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
  28 + implementation project(':syar')
  29 +}
... ...
app/proguard-rules.pro 0 → 100644
  1 +++ a/app/proguard-rules.pro
  1 +# Add project specific ProGuard rules here.
  2 +# You can control the set of applied configuration files using the
  3 +# proguardFiles setting in build.gradle.
  4 +#
  5 +# For more details, see
  6 +# http://developer.android.com/guide/developing/tools/proguard.html
  7 +
  8 +# If your project uses WebView with JS, uncomment the following
  9 +# and specify the fully qualified class name to the JavaScript interface
  10 +# class:
  11 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  12 +# public *;
  13 +#}
  14 +
  15 +# Uncomment this to preserve the line number information for
  16 +# debugging stack traces.
  17 +#-keepattributes SourceFile,LineNumberTable
  18 +
  19 +# If you keep the line number information, uncomment this to
  20 +# hide the original source file name.
  21 +#-renamesourcefileattribute SourceFile
... ...
app/src/androidTest/java/com/cnlive/ardemo/ExampleInstrumentedTest.java 0 → 100644
  1 +++ a/app/src/androidTest/java/com/cnlive/ardemo/ExampleInstrumentedTest.java
  1 +package com.cnlive.ardemo;
  2 +
  3 +import android.content.Context;
  4 +import android.support.test.InstrumentationRegistry;
  5 +import android.support.test.runner.AndroidJUnit4;
  6 +
  7 +import org.junit.Test;
  8 +import org.junit.runner.RunWith;
  9 +
  10 +import static org.junit.Assert.*;
  11 +
  12 +/**
  13 + * Instrumented test, which will execute on an Android device.
  14 + *
  15 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  16 + */
  17 +@RunWith(AndroidJUnit4.class)
  18 +public class ExampleInstrumentedTest {
  19 + @Test
  20 + public void useAppContext() throws Exception {
  21 + // Context of the app under test.
  22 + Context appContext = InstrumentationRegistry.getTargetContext();
  23 +
  24 + assertEquals("com.cnlive.ardemo", appContext.getPackageName());
  25 + }
  26 +}
... ...
app/src/main/AndroidManifest.xml 0 → 100644
  1 +++ a/app/src/main/AndroidManifest.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3 + package="com.cnlive.ardemo">
  4 +
  5 + <application
  6 + android:allowBackup="true"
  7 + android:icon="@mipmap/ic_launcher"
  8 + android:label="@string/app_name"
  9 + android:roundIcon="@mipmap/ic_launcher_round"
  10 + android:supportsRtl="true"
  11 + android:theme="@style/AppTheme">
  12 + <activity android:name=".MainActivity">
  13 + <intent-filter>
  14 + <action android:name="android.intent.action.MAIN" />
  15 +
  16 + <category android:name="android.intent.category.LAUNCHER" />
  17 + </intent-filter>
  18 + </activity>
  19 + </application>
  20 +
  21 +</manifest>
0 22 \ No newline at end of file
... ...
app/src/main/java/com/cnlive/ardemo/MainActivity.java 0 → 100644
  1 +++ a/app/src/main/java/com/cnlive/ardemo/MainActivity.java
  1 +package com.cnlive.ardemo;
  2 +
  3 +import android.content.Intent;
  4 +import android.support.v7.app.AppCompatActivity;
  5 +import android.os.Bundle;
  6 +
  7 +import cn.syar.demo.ArActivity;
  8 +
  9 +public class MainActivity extends AppCompatActivity {
  10 +
  11 + @Override
  12 + protected void onCreate(Bundle savedInstanceState) {
  13 + super.onCreate(savedInstanceState);
  14 + setContentView(R.layout.activity_main);
  15 + startActivity(new Intent(this, ArActivity.class));
  16 + finish();
  17 + }
  18 +}
... ...
app/src/main/res/drawable-v24/ic_launcher_foreground.xml 0 → 100644
  1 +++ a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
  1 +<vector xmlns:android="http://schemas.android.com/apk/res/android"
  2 + xmlns:aapt="http://schemas.android.com/aapt"
  3 + android:width="108dp"
  4 + android:height="108dp"
  5 + android:viewportHeight="108"
  6 + android:viewportWidth="108">
  7 + <path
  8 + android:fillType="evenOdd"
  9 + android:pathData="M32,64C32,64 38.39,52.99 44.13,50.95C51.37,48.37 70.14,49.57 70.14,49.57L108.26,87.69L108,109.01L75.97,107.97L32,64Z"
  10 + android:strokeColor="#00000000"
  11 + android:strokeWidth="1">
  12 + <aapt:attr name="android:fillColor">
  13 + <gradient
  14 + android:endX="78.5885"
  15 + android:endY="90.9159"
  16 + android:startX="48.7653"
  17 + android:startY="61.0927"
  18 + android:type="linear">
  19 + <item
  20 + android:color="#44000000"
  21 + android:offset="0.0" />
  22 + <item
  23 + android:color="#00000000"
  24 + android:offset="1.0" />
  25 + </gradient>
  26 + </aapt:attr>
  27 + </path>
  28 + <path
  29 + android:fillColor="#FFFFFF"
  30 + android:fillType="nonZero"
  31 + android:pathData="M66.94,46.02L66.94,46.02C72.44,50.07 76,56.61 76,64L32,64C32,56.61 35.56,50.11 40.98,46.06L36.18,41.19C35.45,40.45 35.45,39.3 36.18,38.56C36.91,37.81 38.05,37.81 38.78,38.56L44.25,44.05C47.18,42.57 50.48,41.71 54,41.71C57.48,41.71 60.78,42.57 63.68,44.05L69.11,38.56C69.84,37.81 70.98,37.81 71.71,38.56C72.44,39.3 72.44,40.45 71.71,41.19L66.94,46.02ZM62.94,56.92C64.08,56.92 65,56.01 65,54.88C65,53.76 64.08,52.85 62.94,52.85C61.8,52.85 60.88,53.76 60.88,54.88C60.88,56.01 61.8,56.92 62.94,56.92ZM45.06,56.92C46.2,56.92 47.13,56.01 47.13,54.88C47.13,53.76 46.2,52.85 45.06,52.85C43.92,52.85 43,53.76 43,54.88C43,56.01 43.92,56.92 45.06,56.92Z"
  32 + android:strokeColor="#00000000"
  33 + android:strokeWidth="1" />
  34 +</vector>
... ...
app/src/main/res/drawable/ic_launcher_background.xml 0 → 100644
  1 +++ a/app/src/main/res/drawable/ic_launcher_background.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<vector xmlns:android="http://schemas.android.com/apk/res/android"
  3 + android:width="108dp"
  4 + android:height="108dp"
  5 + android:viewportHeight="108"
  6 + android:viewportWidth="108">
  7 + <path
  8 + android:fillColor="#26A69A"
  9 + android:pathData="M0,0h108v108h-108z" />
  10 + <path
  11 + android:fillColor="#00000000"
  12 + android:pathData="M9,0L9,108"
  13 + android:strokeColor="#33FFFFFF"
  14 + android:strokeWidth="0.8" />
  15 + <path
  16 + android:fillColor="#00000000"
  17 + android:pathData="M19,0L19,108"
  18 + android:strokeColor="#33FFFFFF"
  19 + android:strokeWidth="0.8" />
  20 + <path
  21 + android:fillColor="#00000000"
  22 + android:pathData="M29,0L29,108"
  23 + android:strokeColor="#33FFFFFF"
  24 + android:strokeWidth="0.8" />
  25 + <path
  26 + android:fillColor="#00000000"
  27 + android:pathData="M39,0L39,108"
  28 + android:strokeColor="#33FFFFFF"
  29 + android:strokeWidth="0.8" />
  30 + <path
  31 + android:fillColor="#00000000"
  32 + android:pathData="M49,0L49,108"
  33 + android:strokeColor="#33FFFFFF"
  34 + android:strokeWidth="0.8" />
  35 + <path
  36 + android:fillColor="#00000000"
  37 + android:pathData="M59,0L59,108"
  38 + android:strokeColor="#33FFFFFF"
  39 + android:strokeWidth="0.8" />
  40 + <path
  41 + android:fillColor="#00000000"
  42 + android:pathData="M69,0L69,108"
  43 + android:strokeColor="#33FFFFFF"
  44 + android:strokeWidth="0.8" />
  45 + <path
  46 + android:fillColor="#00000000"
  47 + android:pathData="M79,0L79,108"
  48 + android:strokeColor="#33FFFFFF"
  49 + android:strokeWidth="0.8" />
  50 + <path
  51 + android:fillColor="#00000000"
  52 + android:pathData="M89,0L89,108"
  53 + android:strokeColor="#33FFFFFF"
  54 + android:strokeWidth="0.8" />
  55 + <path
  56 + android:fillColor="#00000000"
  57 + android:pathData="M99,0L99,108"
  58 + android:strokeColor="#33FFFFFF"
  59 + android:strokeWidth="0.8" />
  60 + <path
  61 + android:fillColor="#00000000"
  62 + android:pathData="M0,9L108,9"
  63 + android:strokeColor="#33FFFFFF"
  64 + android:strokeWidth="0.8" />
  65 + <path
  66 + android:fillColor="#00000000"
  67 + android:pathData="M0,19L108,19"
  68 + android:strokeColor="#33FFFFFF"
  69 + android:strokeWidth="0.8" />
  70 + <path
  71 + android:fillColor="#00000000"
  72 + android:pathData="M0,29L108,29"
  73 + android:strokeColor="#33FFFFFF"
  74 + android:strokeWidth="0.8" />
  75 + <path
  76 + android:fillColor="#00000000"
  77 + android:pathData="M0,39L108,39"
  78 + android:strokeColor="#33FFFFFF"
  79 + android:strokeWidth="0.8" />
  80 + <path
  81 + android:fillColor="#00000000"
  82 + android:pathData="M0,49L108,49"
  83 + android:strokeColor="#33FFFFFF"
  84 + android:strokeWidth="0.8" />
  85 + <path
  86 + android:fillColor="#00000000"
  87 + android:pathData="M0,59L108,59"
  88 + android:strokeColor="#33FFFFFF"
  89 + android:strokeWidth="0.8" />
  90 + <path
  91 + android:fillColor="#00000000"
  92 + android:pathData="M0,69L108,69"
  93 + android:strokeColor="#33FFFFFF"
  94 + android:strokeWidth="0.8" />
  95 + <path
  96 + android:fillColor="#00000000"
  97 + android:pathData="M0,79L108,79"
  98 + android:strokeColor="#33FFFFFF"
  99 + android:strokeWidth="0.8" />
  100 + <path
  101 + android:fillColor="#00000000"
  102 + android:pathData="M0,89L108,89"
  103 + android:strokeColor="#33FFFFFF"
  104 + android:strokeWidth="0.8" />
  105 + <path
  106 + android:fillColor="#00000000"
  107 + android:pathData="M0,99L108,99"
  108 + android:strokeColor="#33FFFFFF"
  109 + android:strokeWidth="0.8" />
  110 + <path
  111 + android:fillColor="#00000000"
  112 + android:pathData="M19,29L89,29"
  113 + android:strokeColor="#33FFFFFF"
  114 + android:strokeWidth="0.8" />
  115 + <path
  116 + android:fillColor="#00000000"
  117 + android:pathData="M19,39L89,39"
  118 + android:strokeColor="#33FFFFFF"
  119 + android:strokeWidth="0.8" />
  120 + <path
  121 + android:fillColor="#00000000"
  122 + android:pathData="M19,49L89,49"
  123 + android:strokeColor="#33FFFFFF"
  124 + android:strokeWidth="0.8" />
  125 + <path
  126 + android:fillColor="#00000000"
  127 + android:pathData="M19,59L89,59"
  128 + android:strokeColor="#33FFFFFF"
  129 + android:strokeWidth="0.8" />
  130 + <path
  131 + android:fillColor="#00000000"
  132 + android:pathData="M19,69L89,69"
  133 + android:strokeColor="#33FFFFFF"
  134 + android:strokeWidth="0.8" />
  135 + <path
  136 + android:fillColor="#00000000"
  137 + android:pathData="M19,79L89,79"
  138 + android:strokeColor="#33FFFFFF"
  139 + android:strokeWidth="0.8" />
  140 + <path
  141 + android:fillColor="#00000000"
  142 + android:pathData="M29,19L29,89"
  143 + android:strokeColor="#33FFFFFF"
  144 + android:strokeWidth="0.8" />
  145 + <path
  146 + android:fillColor="#00000000"
  147 + android:pathData="M39,19L39,89"
  148 + android:strokeColor="#33FFFFFF"
  149 + android:strokeWidth="0.8" />
  150 + <path
  151 + android:fillColor="#00000000"
  152 + android:pathData="M49,19L49,89"
  153 + android:strokeColor="#33FFFFFF"
  154 + android:strokeWidth="0.8" />
  155 + <path
  156 + android:fillColor="#00000000"
  157 + android:pathData="M59,19L59,89"
  158 + android:strokeColor="#33FFFFFF"
  159 + android:strokeWidth="0.8" />
  160 + <path
  161 + android:fillColor="#00000000"
  162 + android:pathData="M69,19L69,89"
  163 + android:strokeColor="#33FFFFFF"
  164 + android:strokeWidth="0.8" />
  165 + <path
  166 + android:fillColor="#00000000"
  167 + android:pathData="M79,19L79,89"
  168 + android:strokeColor="#33FFFFFF"
  169 + android:strokeWidth="0.8" />
  170 +</vector>
... ...
app/src/main/res/layout/activity_main.xml 0 → 100644
  1 +++ a/app/src/main/res/layout/activity_main.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:app="http://schemas.android.com/apk/res-auto"
  4 + xmlns:tools="http://schemas.android.com/tools"
  5 + android:layout_width="match_parent"
  6 + android:layout_height="match_parent"
  7 + tools:context="com.cnlive.ardemo.MainActivity">
  8 +
  9 +
  10 +</android.support.constraint.ConstraintLayout>
... ...
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml 0 → 100644
  1 +++ a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <background android:drawable="@drawable/ic_launcher_background" />
  4 + <foreground android:drawable="@drawable/ic_launcher_foreground" />
  5 +</adaptive-icon>
0 6 \ No newline at end of file
... ...
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml 0 → 100644
  1 +++ a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  3 + <background android:drawable="@drawable/ic_launcher_background" />
  4 + <foreground android:drawable="@drawable/ic_launcher_foreground" />
  5 +</adaptive-icon>
0 6 \ No newline at end of file
... ...
app/src/main/res/mipmap-hdpi/ic_launcher.png 0 → 100644

2.98 KB

app/src/main/res/mipmap-hdpi/ic_launcher_round.png 0 → 100644

4.91 KB

app/src/main/res/mipmap-mdpi/ic_launcher.png 0 → 100644

2.05 KB

app/src/main/res/mipmap-mdpi/ic_launcher_round.png 0 → 100644

2.79 KB

app/src/main/res/mipmap-xhdpi/ic_launcher.png 0 → 100644

4.46 KB

app/src/main/res/mipmap-xhdpi/ic_launcher_round.png 0 → 100644

6.93 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher.png 0 → 100644

6.31 KB

app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png 0 → 100644

10.4 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher.png 0 → 100644

9.03 KB

app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png 0 → 100644

15.2 KB

app/src/main/res/values/colors.xml 0 → 100644
  1 +++ a/app/src/main/res/values/colors.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <color name="colorPrimary">#3F51B5</color>
  4 + <color name="colorPrimaryDark">#303F9F</color>
  5 + <color name="colorAccent">#FF4081</color>
  6 +</resources>
... ...
app/src/main/res/values/strings.xml 0 → 100644
  1 +++ a/app/src/main/res/values/strings.xml
  1 +<resources>
  2 + <string name="app_name">ArDemo</string>
  3 +</resources>
... ...
app/src/main/res/values/styles.xml 0 → 100644
  1 +++ a/app/src/main/res/values/styles.xml
  1 +<resources>
  2 +
  3 + <!-- Base application theme. -->
  4 + <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  5 + <!-- Customize your theme here. -->
  6 + <item name="colorPrimary">@color/colorPrimary</item>
  7 + <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  8 + <item name="colorAccent">@color/colorAccent</item>
  9 + </style>
  10 +
  11 +</resources>
... ...
app/src/test/java/com/cnlive/ardemo/ExampleUnitTest.java 0 → 100644
  1 +++ a/app/src/test/java/com/cnlive/ardemo/ExampleUnitTest.java
  1 +package com.cnlive.ardemo;
  2 +
  3 +import org.junit.Test;
  4 +
  5 +import static org.junit.Assert.*;
  6 +
  7 +/**
  8 + * Example local unit test, which will execute on the development machine (host).
  9 + *
  10 + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
  11 + */
  12 +public class ExampleUnitTest {
  13 + @Test
  14 + public void addition_isCorrect() throws Exception {
  15 + assertEquals(4, 2 + 2);
  16 + }
  17 +}
0 18 \ No newline at end of file
... ...
build.gradle 0 → 100644
  1 +++ a/build.gradle
  1 +// Top-level build file where you can add configuration options common to all sub-projects/modules.
  2 +
  3 +buildscript {
  4 +
  5 + repositories {
  6 + google()
  7 + jcenter()
  8 + }
  9 + dependencies {
  10 + classpath 'com.android.tools.build:gradle:3.0.1'
  11 +
  12 +
  13 + // NOTE: Do not place your application dependencies here; they belong
  14 + // in the individual module build.gradle files
  15 + }
  16 +}
  17 +
  18 +allprojects {
  19 + repositories {
  20 + google()
  21 + jcenter()
  22 + }
  23 +}
  24 +
  25 +task clean(type: Delete) {
  26 + delete rootProject.buildDir
  27 +}
... ...
gradle.properties 0 → 100644
  1 +++ a/gradle.properties
  1 +## Project-wide Gradle settings.
  2 +#
  3 +# For more details on how to configure your build environment visit
  4 +# http://www.gradle.org/docs/current/userguide/build_environment.html
  5 +#
  6 +# Specifies the JVM arguments used for the daemon process.
  7 +# The setting is particularly useful for tweaking memory settings.
  8 +# Default value: -Xmx1024m -XX:MaxPermSize=256m
  9 +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
  10 +#
  11 +# When configured, Gradle will run in incubating parallel mode.
  12 +# This option should only be used with decoupled projects. More details, visit
  13 +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
  14 +# org.gradle.parallel=true
  15 +#Fri Dec 28 16:57:11 CST 2018
  16 +systemProp.http.proxyHost=127.0.0.1
  17 +org.gradle.jvmargs=-Xmx1536m
  18 +systemProp.http.proxyPort=1080
... ...
gradle/wrapper/gradle-wrapper.jar 0 → 100644
No preview for this file type
gradle/wrapper/gradle-wrapper.properties 0 → 100644
  1 +++ a/gradle/wrapper/gradle-wrapper.properties
  1 +#Fri Dec 28 16:57:09 CST 2018
  2 +distributionBase=GRADLE_USER_HOME
  3 +distributionPath=wrapper/dists
  4 +zipStoreBase=GRADLE_USER_HOME
  5 +zipStorePath=wrapper/dists
  6 +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
... ...
gradlew 0 → 100644
  1 +++ a/gradlew
  1 +#!/usr/bin/env bash
  2 +
  3 +##############################################################################
  4 +##
  5 +## Gradle start up script for UN*X
  6 +##
  7 +##############################################################################
  8 +
  9 +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  10 +DEFAULT_JVM_OPTS=""
  11 +
  12 +APP_NAME="Gradle"
  13 +APP_BASE_NAME=`basename "$0"`
  14 +
  15 +# Use the maximum available, or set MAX_FD != -1 to use that value.
  16 +MAX_FD="maximum"
  17 +
  18 +warn ( ) {
  19 + echo "$*"
  20 +}
  21 +
  22 +die ( ) {
  23 + echo
  24 + echo "$*"
  25 + echo
  26 + exit 1
  27 +}
  28 +
  29 +# OS specific support (must be 'true' or 'false').
  30 +cygwin=false
  31 +msys=false
  32 +darwin=false
  33 +case "`uname`" in
  34 + CYGWIN* )
  35 + cygwin=true
  36 + ;;
  37 + Darwin* )
  38 + darwin=true
  39 + ;;
  40 + MINGW* )
  41 + msys=true
  42 + ;;
  43 +esac
  44 +
  45 +# Attempt to set APP_HOME
  46 +# Resolve links: $0 may be a link
  47 +PRG="$0"
  48 +# Need this for relative symlinks.
  49 +while [ -h "$PRG" ] ; do
  50 + ls=`ls -ld "$PRG"`
  51 + link=`expr "$ls" : '.*-> \(.*\)$'`
  52 + if expr "$link" : '/.*' > /dev/null; then
  53 + PRG="$link"
  54 + else
  55 + PRG=`dirname "$PRG"`"/$link"
  56 + fi
  57 +done
  58 +SAVED="`pwd`"
  59 +cd "`dirname \"$PRG\"`/" >/dev/null
  60 +APP_HOME="`pwd -P`"
  61 +cd "$SAVED" >/dev/null
  62 +
  63 +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
  64 +
  65 +# Determine the Java command to use to start the JVM.
  66 +if [ -n "$JAVA_HOME" ] ; then
  67 + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
  68 + # IBM's JDK on AIX uses strange locations for the executables
  69 + JAVACMD="$JAVA_HOME/jre/sh/java"
  70 + else
  71 + JAVACMD="$JAVA_HOME/bin/java"
  72 + fi
  73 + if [ ! -x "$JAVACMD" ] ; then
  74 + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
  75 +
  76 +Please set the JAVA_HOME variable in your environment to match the
  77 +location of your Java installation."
  78 + fi
  79 +else
  80 + JAVACMD="java"
  81 + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  82 +
  83 +Please set the JAVA_HOME variable in your environment to match the
  84 +location of your Java installation."
  85 +fi
  86 +
  87 +# Increase the maximum file descriptors if we can.
  88 +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
  89 + MAX_FD_LIMIT=`ulimit -H -n`
  90 + if [ $? -eq 0 ] ; then
  91 + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
  92 + MAX_FD="$MAX_FD_LIMIT"
  93 + fi
  94 + ulimit -n $MAX_FD
  95 + if [ $? -ne 0 ] ; then
  96 + warn "Could not set maximum file descriptor limit: $MAX_FD"
  97 + fi
  98 + else
  99 + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
  100 + fi
  101 +fi
  102 +
  103 +# For Darwin, add options to specify how the application appears in the dock
  104 +if $darwin; then
  105 + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
  106 +fi
  107 +
  108 +# For Cygwin, switch paths to Windows format before running java
  109 +if $cygwin ; then
  110 + APP_HOME=`cygpath --path --mixed "$APP_HOME"`
  111 + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
  112 + JAVACMD=`cygpath --unix "$JAVACMD"`
  113 +
  114 + # We build the pattern for arguments to be converted via cygpath
  115 + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
  116 + SEP=""
  117 + for dir in $ROOTDIRSRAW ; do
  118 + ROOTDIRS="$ROOTDIRS$SEP$dir"
  119 + SEP="|"
  120 + done
  121 + OURCYGPATTERN="(^($ROOTDIRS))"
  122 + # Add a user-defined pattern to the cygpath arguments
  123 + if [ "$GRADLE_CYGPATTERN" != "" ] ; then
  124 + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
  125 + fi
  126 + # Now convert the arguments - kludge to limit ourselves to /bin/sh
  127 + i=0
  128 + for arg in "$@" ; do
  129 + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
  130 + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
  131 +
  132 + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
  133 + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
  134 + else
  135 + eval `echo args$i`="\"$arg\""
  136 + fi
  137 + i=$((i+1))
  138 + done
  139 + case $i in
  140 + (0) set -- ;;
  141 + (1) set -- "$args0" ;;
  142 + (2) set -- "$args0" "$args1" ;;
  143 + (3) set -- "$args0" "$args1" "$args2" ;;
  144 + (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
  145 + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
  146 + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
  147 + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
  148 + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
  149 + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
  150 + esac
  151 +fi
  152 +
  153 +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
  154 +function splitJvmOpts() {
  155 + JVM_OPTS=("$@")
  156 +}
  157 +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
  158 +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
  159 +
  160 +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
... ...
gradlew.bat 0 → 100644
  1 +++ a/gradlew.bat
  1 +@if "%DEBUG%" == "" @echo off
  2 +@rem ##########################################################################
  3 +@rem
  4 +@rem Gradle startup script for Windows
  5 +@rem
  6 +@rem ##########################################################################
  7 +
  8 +@rem Set local scope for the variables with windows NT shell
  9 +if "%OS%"=="Windows_NT" setlocal
  10 +
  11 +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
  12 +set DEFAULT_JVM_OPTS=
  13 +
  14 +set DIRNAME=%~dp0
  15 +if "%DIRNAME%" == "" set DIRNAME=.
  16 +set APP_BASE_NAME=%~n0
  17 +set APP_HOME=%DIRNAME%
  18 +
  19 +@rem Find java.exe
  20 +if defined JAVA_HOME goto findJavaFromJavaHome
  21 +
  22 +set JAVA_EXE=java.exe
  23 +%JAVA_EXE% -version >NUL 2>&1
  24 +if "%ERRORLEVEL%" == "0" goto init
  25 +
  26 +echo.
  27 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
  28 +echo.
  29 +echo Please set the JAVA_HOME variable in your environment to match the
  30 +echo location of your Java installation.
  31 +
  32 +goto fail
  33 +
  34 +:findJavaFromJavaHome
  35 +set JAVA_HOME=%JAVA_HOME:"=%
  36 +set JAVA_EXE=%JAVA_HOME%/bin/java.exe
  37 +
  38 +if exist "%JAVA_EXE%" goto init
  39 +
  40 +echo.
  41 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
  42 +echo.
  43 +echo Please set the JAVA_HOME variable in your environment to match the
  44 +echo location of your Java installation.
  45 +
  46 +goto fail
  47 +
  48 +:init
  49 +@rem Get command-line arguments, handling Windowz variants
  50 +
  51 +if not "%OS%" == "Windows_NT" goto win9xME_args
  52 +if "%@eval[2+2]" == "4" goto 4NT_args
  53 +
  54 +:win9xME_args
  55 +@rem Slurp the command line arguments.
  56 +set CMD_LINE_ARGS=
  57 +set _SKIP=2
  58 +
  59 +:win9xME_args_slurp
  60 +if "x%~1" == "x" goto execute
  61 +
  62 +set CMD_LINE_ARGS=%*
  63 +goto execute
  64 +
  65 +:4NT_args
  66 +@rem Get arguments from the 4NT Shell from JP Software
  67 +set CMD_LINE_ARGS=%$
  68 +
  69 +:execute
  70 +@rem Setup the command line
  71 +
  72 +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
  73 +
  74 +@rem Execute Gradle
  75 +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
  76 +
  77 +:end
  78 +@rem End local scope for the variables with windows NT shell
  79 +if "%ERRORLEVEL%"=="0" goto mainEnd
  80 +
  81 +:fail
  82 +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
  83 +rem the _cmd.exe /c_ return code!
  84 +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
  85 +exit /b 1
  86 +
  87 +:mainEnd
  88 +if "%OS%"=="Windows_NT" endlocal
  89 +
  90 +:omega
... ...
settings.gradle 0 → 100644
  1 +++ a/settings.gradle
  1 +include ':app', ':syar'
... ...
syar/.gitignore 0 → 100644
  1 +++ a/syar/.gitignore
  1 +/build
... ...
syar/build.gradle 0 → 100644
  1 +++ a/syar/build.gradle
  1 +apply plugin: 'com.android.library'
  2 +
  3 +android {
  4 + compileSdkVersion 27
  5 +
  6 +
  7 +
  8 + defaultConfig {
  9 + minSdkVersion 16
  10 + targetSdkVersion 27
  11 + versionCode 1
  12 + versionName "1.0"
  13 +
  14 + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  15 +
  16 + }
  17 +
  18 + buildTypes {
  19 + release {
  20 + minifyEnabled false
  21 + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
  22 + }
  23 + }
  24 +
  25 +}
  26 +
  27 +dependencies {
  28 + compile fileTree(dir: 'libs', include: ['*.jar'])
  29 + implementation 'com.android.support:appcompat-v7:27.1.0'
  30 + implementation 'com.android.support.constraint:constraint-layout:1.1.2'
  31 + testImplementation 'junit:junit:4.12'
  32 + androidTestImplementation 'com.android.support.test:runner:1.0.2'
  33 + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
  34 + compile files('libs/SyAR.jar')
  35 +}
... ...
syar/libs/SyAR.jar 0 → 100644
No preview for this file type
syar/proguard-rules.pro 0 → 100644
  1 +++ a/syar/proguard-rules.pro
  1 +# Add project specific ProGuard rules here.
  2 +# You can control the set of applied configuration files using the
  3 +# proguardFiles setting in build.gradle.
  4 +#
  5 +# For more details, see
  6 +# http://developer.android.com/guide/developing/tools/proguard.html
  7 +
  8 +# If your project uses WebView with JS, uncomment the following
  9 +# and specify the fully qualified class name to the JavaScript interface
  10 +# class:
  11 +#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
  12 +# public *;
  13 +#}
  14 +
  15 +# Uncomment this to preserve the line number information for
  16 +# debugging stack traces.
  17 +#-keepattributes SourceFile,LineNumberTable
  18 +
  19 +# If you keep the line number information, uncomment this to
  20 +# hide the original source file name.
  21 +#-renamesourcefileattribute SourceFile
... ...
syar/src/main/AndroidManifest.xml 0 → 100644
  1 +++ a/syar/src/main/AndroidManifest.xml
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="cn.syar.demo" >
  3 +
  4 + <uses-permission android:name="android.permission.CAMERA" />
  5 + <uses-permission android:name="android.permission.INTERNET" />
  6 + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  7 + <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  8 +
  9 + <uses-feature
  10 + android:name="android.hardware.camera.autofocus"
  11 + android:required="false" />
  12 + <uses-feature
  13 + android:name="android.hardware.camera"
  14 + android:required="false" />
  15 +
  16 + <application>
  17 + <activity android:name=".ArActivity"
  18 + android:screenOrientation="portrait"
  19 + android:configChanges="orientation|keyboardHidden"/>
  20 + </application>
  21 +</manifest>
0 22 \ No newline at end of file
... ...
syar/src/main/java/cn/syar/demo/ArActivity.java 0 → 100644
  1 +++ a/syar/src/main/java/cn/syar/demo/ArActivity.java
  1 +package cn.syar.demo;
  2 +
  3 +import android.Manifest;
  4 +import android.os.Bundle;
  5 +import android.support.v7.app.AppCompatActivity;
  6 +import android.view.ViewGroup;
  7 +import android.widget.Toast;
  8 +
  9 +import cn.syar.engine.ARView;
  10 +import cn.syar.engine.AndroidDevice;
  11 +import cn.syar.engine.PermissionFragment;
  12 +import cn.syar.engine.SyARLogger;
  13 +import cn.syar.engine.SyARNative;
  14 +import cn.syar.engine.SyARUtils;
  15 +import cn.syar.engine.UnityActivityHelper;
  16 +
  17 +public class ArActivity extends AppCompatActivity {
  18 +
  19 + private ARView mARView;
  20 + @Override
  21 + protected void onCreate(Bundle savedInstanceState) {
  22 + super.onCreate(savedInstanceState);
  23 + setContentView(R.layout.activity_ar);
  24 + AndroidDevice.CAMERA_VERSION = 1;
  25 + UnityActivityHelper.currActivity = this;
  26 + SyARNative.Init();
  27 + SyARLogger.getInstance().debug("------MainActivity -> onCreate");
  28 + if(!SyARUtils.checkPermission(Manifest.permission.CAMERA)) {
  29 + requestPermission(Manifest.permission.CAMERA);
  30 + }else{
  31 + onARStart();
  32 + }
  33 + }
  34 +
  35 + void requestPermission(String permName){
  36 + final String requestPermName = permName;
  37 + PermissionFragment.PermissionCallback callback = new PermissionFragment.PermissionCallback(){
  38 + public void callback(final String permissionName, final boolean pass)
  39 + {
  40 + SyARLogger.getInstance().debug("permission callback permissionName="+permissionName +" pass = "+pass);
  41 + runOnUiThread(new Runnable() {
  42 + @Override
  43 + public void run() {
  44 + if(permissionName.equals(requestPermName) && pass) {
  45 + onARStart();
  46 + }else{
  47 + Toast.makeText(ArActivity.this, requestPermName + " Permission denied", Toast.LENGTH_SHORT).show();
  48 + }
  49 + }
  50 + });
  51 + }
  52 + };
  53 + SyARUtils.requestPermissions(requestPermName,callback);
  54 + }
  55 +
  56 + public void onARStart(){
  57 + mARView = new ARView(this);
  58 + ViewGroup preview = ((ViewGroup) findViewById(R.id.preview));
  59 + ARView.preview = preview;
  60 + preview.addView(mARView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
  61 + }
  62 +
  63 + @Override
  64 + protected void onResume()
  65 + {
  66 + SyARLogger.getInstance().debug("AR Activity onResume");
  67 + super.onResume();
  68 + if(mARView != null){
  69 + SyARNative.onResume();
  70 + }
  71 +
  72 + }
  73 +
  74 + @Override
  75 + protected void onPause()
  76 + {
  77 + if(mARView != null) {
  78 + SyARNative.onPause();
  79 + }
  80 + super.onPause();
  81 + }
  82 +}
... ...
syar/src/main/java/cn/syar/engine/ARView.java 0 → 100644
  1 +++ a/syar/src/main/java/cn/syar/engine/ARView.java
  1 +package cn.syar.engine;
  2 +
  3 +import android.content.Context;
  4 +import android.opengl.GLSurfaceView;
  5 +import android.view.Gravity;
  6 +import android.view.MotionEvent;
  7 +import android.view.ViewGroup;
  8 +import android.widget.FrameLayout;
  9 +import android.widget.LinearLayout.LayoutParams;
  10 +import android.widget.VideoView;
  11 +
  12 +import javax.microedition.khronos.egl.EGL10;
  13 +import javax.microedition.khronos.egl.EGLConfig;
  14 +import javax.microedition.khronos.egl.EGLContext;
  15 +import javax.microedition.khronos.egl.EGLDisplay;
  16 +import javax.microedition.khronos.opengles.GL10;
  17 +
  18 +public class ARView extends GLSurfaceView {
  19 + private VideoRenderer videoRenderer;
  20 + public ARView(Context context){
  21 + super(context);
  22 + init(context);
  23 + ARView.context = context;
  24 + }
  25 +
  26 + private void init(Context context) {
  27 + setEGLContextFactory(new EGLContextFactory(){
  28 + private static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
  29 + @Override
  30 + public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig){
  31 + // Trying to create an OpenGL ES 3.0 context
  32 + int[] attribList = {EGL_CONTEXT_CLIENT_VERSION, 3, EGL10.EGL_NONE};
  33 + EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attribList);
  34 + if ((null == context) || context.equals(EGL10.EGL_NO_CONTEXT)) {
  35 + attribList[1] = 2;
  36 + context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attribList);
  37 + }
  38 + return context;
  39 + }
  40 +
  41 + /**
  42 + * It destroys the OpenGL Context.
  43 + */
  44 + @Override
  45 + public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context){
  46 + egl.eglDestroyContext(display, context);
  47 + }
  48 + });
  49 + ///
  50 + setEGLConfigChooser(new GLSurfaceView.EGLConfigChooser(){
  51 + @Override
  52 + public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display){
  53 + final int EGL_OPENGL_ES2_BIT = 0x0004;
  54 + final int[] attrib = { EGL10.EGL_RED_SIZE, 4, EGL10.EGL_GREEN_SIZE, 4, EGL10.EGL_BLUE_SIZE, 4,
  55 + EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL10.EGL_NONE };
  56 +
  57 + int[] num_config = new int[1];
  58 + egl.eglChooseConfig(display, attrib, null, 0, num_config);
  59 +
  60 + int numConfigs = num_config[0];
  61 + if (numConfigs <= 0)
  62 + throw new IllegalArgumentException("fail to choose EGL configs");
  63 +
  64 + EGLConfig[] configs = new EGLConfig[numConfigs];
  65 + egl.eglChooseConfig(display, attrib, configs, numConfigs,
  66 + num_config);
  67 +
  68 + for (EGLConfig config : configs)
  69 + {
  70 + int[] val = new int[1];
  71 + int r = 0, g = 0, b = 0, a = 0, d = 0;
  72 + if (egl.eglGetConfigAttrib(display, config, EGL10.EGL_DEPTH_SIZE, val))
  73 + d = val[0];
  74 + if (d < 16)
  75 + continue;
  76 +
  77 + if (egl.eglGetConfigAttrib(display, config, EGL10.EGL_RED_SIZE, val))
  78 + r = val[0];
  79 + if (egl.eglGetConfigAttrib(display, config, EGL10.EGL_GREEN_SIZE, val))
  80 + g = val[0];
  81 + if (egl.eglGetConfigAttrib(display, config, EGL10.EGL_BLUE_SIZE, val))
  82 + b = val[0];
  83 + if (egl.eglGetConfigAttrib(display, config, EGL10.EGL_ALPHA_SIZE, val))
  84 + a = val[0];
  85 + if (r == 8 && g == 8 && b == 8 && a == 0)
  86 + return config;
  87 + }
  88 + return configs[0];
  89 + }
  90 + });
  91 + ////设置渲染器
  92 + setRenderer(new GLSurfaceView.Renderer() {
  93 + @Override
  94 + public void onSurfaceCreated(GL10 gl, EGLConfig config) {
  95 + SyARLogger.getInstance().debug("ARView onSurfaceCreated");
  96 + videoRenderer = new VideoRenderer();
  97 + }
  98 +
  99 + @Override
  100 + public void onSurfaceChanged(GL10 gl, int w, int h) {
  101 + SyARLogger.getInstance().debug("ARView onSurfaceChanged w="+w +" h="+h);
  102 + try {
  103 + synchronized (this) {
  104 + videoRenderer.init(w,h);
  105 + }
  106 + } catch (Throwable ex) {
  107 +
  108 + }
  109 + }
  110 +
  111 + @Override
  112 + public void onDrawFrame(GL10 gl) {
  113 + try {
  114 + synchronized (this) {
  115 + videoRenderer.draw(null,0,0,0);
  116 + }
  117 + } catch (Throwable ex) {
  118 +
  119 + }
  120 + }
  121 + });
  122 + }
  123 +
  124 + @Override
  125 + protected void onDetachedFromWindow()
  126 + {
  127 + SyARLogger.getInstance().debug("### ARView dispose");
  128 + try {
  129 + synchronized (this) {
  130 + videoRenderer.destroy();
  131 + if(videoView != null){
  132 + exitFullScreenCallback();
  133 + videoView = null;
  134 + }
  135 + }
  136 + } catch (Throwable ex) {
  137 + }
  138 + super.onDetachedFromWindow();
  139 + }
  140 +
  141 + boolean firstTouch = false;
  142 + long startTime = 0;
  143 + @Override
  144 + public boolean onTouchEvent(final MotionEvent event) {
  145 + if(event.getAction() == event.ACTION_DOWN){
  146 + if(firstTouch && (System.currentTimeMillis() - startTime) <= 300) {
  147 + //do stuff here for double tap
  148 + SyARLogger.getInstance().debug(" ###doubleTap### ");
  149 + doubleTap();
  150 + firstTouch = false;
  151 + } else {
  152 + firstTouch = true;
  153 + startTime = System.currentTimeMillis();
  154 + return false;
  155 + }
  156 + }
  157 + return true;
  158 + }
  159 +
  160 +
  161 + private static VideoView videoView;
  162 + public static ViewGroup preview;
  163 + public static Context context;
  164 + private static boolean isVideoFullScreen = false;
  165 + public static void fullScreenVideoPlay(final String videoURL){
  166 + SyARLogger.getInstance().debug("###fullScreenVideoPlay "+videoURL);
  167 + UnityActivityHelper.currActivity.runOnUiThread(new Runnable() {
  168 + @Override
  169 + public void run() {
  170 + if(videoView == null){
  171 + videoView = new VideoView(context);
  172 + FrameLayout.LayoutParams layoutParams=new FrameLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
  173 + layoutParams.gravity = Gravity.CENTER;
  174 + preview.addView(videoView,layoutParams);
  175 + MediaControllerEx mediaController = new MediaControllerEx(UnityActivityHelper.currActivity,videoView);
  176 + }
  177 + videoView.setVideoPath(videoURL);
  178 + videoView.requestFocus();
  179 + videoView.start();
  180 + videoView.setZOrderOnTop( true );
  181 + isVideoFullScreen = true;
  182 + }
  183 + });
  184 + }
  185 +
  186 + public static void exitVideoFullScreen(){
  187 + if(videoView != null) {
  188 + videoView.stopPlayback();
  189 + videoView.clearFocus();
  190 + preview.removeView(videoView);
  191 + videoView = null;
  192 + exitFullScreenCallback();
  193 + }
  194 + }
  195 +
  196 + private native void doubleTap();
  197 + private static native void exitFullScreenCallback();
  198 +}
0 199 \ No newline at end of file
... ...
syar/src/main/java/cn/syar/engine/MediaControllerEx.java 0 → 100644
  1 +++ a/syar/src/main/java/cn/syar/engine/MediaControllerEx.java
  1 +package cn.syar.engine;
  2 +
  3 +import android.app.Activity;
  4 +import android.content.Context;
  5 +import android.view.Gravity;
  6 +import android.view.View;
  7 +import android.widget.FrameLayout;
  8 +import android.widget.ImageView;
  9 +import android.widget.MediaController;
  10 +import android.widget.VideoView;
  11 +
  12 +import cn.syar.demo.R;
  13 +
  14 +
  15 +public class MediaControllerEx extends MediaController {
  16 +
  17 + private VideoView videoView;
  18 + private Context context;
  19 +
  20 + public MediaControllerEx(Activity activity, VideoView videoView) {
  21 + super(activity);
  22 + context = activity.getApplicationContext();
  23 + this.videoView = videoView;
  24 + this.videoView.setMediaController(this);
  25 + this.show(3);
  26 + }
  27 +
  28 + @Override
  29 + public void setAnchorView(View view) {
  30 + super.setAnchorView(view);
  31 + ImageView exitBtn = new ImageView(context);
  32 + exitBtn.setImageResource(R.drawable.exit);
  33 + FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
  34 + params.gravity = Gravity.RIGHT| Gravity.TOP;
  35 + params.rightMargin = 40;
  36 + params.topMargin = 40;
  37 + exitBtn.setOnClickListener(new OnClickListener() {
  38 + @Override
  39 + public void onClick(View v) {
  40 + ARView.exitVideoFullScreen();
  41 + }
  42 + });
  43 + addView(exitBtn, params);
  44 + }
  45 +}
0 46 \ No newline at end of file
... ...
syar/src/main/java/cn/syar/engine/VideoRenderer.java 0 → 100644
  1 +++ a/syar/src/main/java/cn/syar/engine/VideoRenderer.java
  1 +package cn.syar.engine;
  2 +
  3 +public class VideoRenderer{
  4 + public VideoRenderer() {
  5 + create();
  6 + }
  7 + private native void create();
  8 + public native void destroy();
  9 + public native void init(int width, int height);
  10 + public native void render();
  11 + public native void draw(byte[] data, int width, int height, int rotation);
  12 +}
0 13 \ No newline at end of file
... ...
syar/src/main/jniLibs/armeabi-v7a/libSYAR-Plugin.so 0 → 100644
No preview for this file type
syar/src/main/res/drawable/exit.png 0 → 100644

359 Bytes

syar/src/main/res/layout/activity_ar.xml 0 → 100644
  1 +++ a/syar/src/main/res/layout/activity_ar.xml
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3 + xmlns:tools="http://schemas.android.com/tools"
  4 + android:layout_width="match_parent"
  5 + android:layout_height="match_parent">
  6 +
  7 + <FrameLayout
  8 + android:id="@+id/preview"
  9 + android:layout_width="match_parent"
  10 + android:layout_height="match_parent"
  11 + android:background="@android:color/black">
  12 +
  13 + </FrameLayout>
  14 +</RelativeLayout>
0 15 \ No newline at end of file
... ...
syar/src/main/res/values/strings.xml 0 → 100644
  1 +++ a/syar/src/main/res/values/strings.xml
  1 +<resources>
  2 + <string name="app_name">ardata</string>
  3 +</resources>
... ...