у него нет ошибки сборки, но происходит сбой при запуске на эмуляторе.
основная деятельность
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myrajawali">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity" android:screenOrientation="landscape">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="com.google.intent.category.CARDBOARD" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:context=".MainActivity">
<com.google.vrtoolkit.cardboard.CardboardView
android:id="@+id/cardboard_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
VedioRenderer.java
package com.example.myrajawali;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import com.google.vrtoolkit.cardboard.CardboardActivity;
import com.google.vrtoolkit.cardboard.CardboardView;
public class MainActivity extends CardboardActivity {
private CardboardView cardboardView;
private MediaPlayer mediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cardboardView = findViewById(R.id.cardboard_view);
// init media player for video
mediaPlayer = MediaPlayer.create(this, R.raw.sample);
Log.d("AAAA","aaaaaaaaaaaaaaaaaaaaaaaa");
mediaPlayer.setLooping(true);
//create renderee
CardboardView.StereoRenderer renderer = new Vediorenderer(this, mediaPlayer);
// associate a renderer with cardboardView
cardboardView.setRenderer(renderer);
// associate the cardboardView with this activity
setCardboardView(cardboardView);
}
@Override
public void onCardboardTrigger() {
super.onCardboardTrigger();
// toggle vr mode on touch/trigger
cardboardView.setVRModeEnabled(!cardboardView.getVRMode());
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mediaPlayer != null) {
mediaPlayer.start();
}
}
}
Эта ошибка возникает, когда в вашем XML-файле макета есть какие-либо проблемы. Ошибка возникает в строке № 9 вашего
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black"
tools:context=".MainActivity">
<com.google.vrtoolkit.cardboard.CardboardView
android:id="@+id/cardboard_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
, где вы используете package com.example.myrajawali;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import com.google.vrtoolkit.cardboard.CardboardActivity;
import com.google.vrtoolkit.cardboard.CardboardView;
public class MainActivity extends CardboardActivity {
private CardboardView cardboardView;
private MediaPlayer mediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cardboardView = findViewById(R.id.cardboard_view);
// init media player for video
mediaPlayer = MediaPlayer.create(this, R.raw.sample);
Log.d("AAAA","aaaaaaaaaaaaaaaaaaaaaaaa");
mediaPlayer.setLooping(true);
//create renderee
CardboardView.StereoRenderer renderer = new Vediorenderer(this, mediaPlayer);
// associate a renderer with cardboardView
cardboardView.setRenderer(renderer);
// associate the cardboardView with this activity
setCardboardView(cardboardView);
}
@Override
public void onCardboardTrigger() {
super.onCardboardTrigger();
// toggle vr mode on touch/trigger
cardboardView.setVRModeEnabled(!cardboardView.getVRMode());
}
@Override
protected void onPause() {
super.onPause();
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
@Override
protected void onResume() {
super.onResume();
if (mediaPlayer != null) {
mediaPlayer.start();
}
}
}
из package com.example.myrajawali;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.view.MotionEvent;
import com.google.vrtoolkit.cardboard.CardboardView;
import com.google.vrtoolkit.cardboard.Eye;
import com.google.vrtoolkit.cardboard.FieldOfView;
import com.google.vrtoolkit.cardboard.HeadTransform;
import com.google.vrtoolkit.cardboard.Viewport;
import org.rajawali3d.cameras.Camera;
import org.rajawali3d.materials.Material;
import org.rajawali3d.math.Matrix4;
import org.rajawali3d.math.Quaternion;
import org.rajawali3d.math.vector.Vector3;
import org.rajawali3d.primitives.Sphere;
import org.rajawali3d.renderer.Renderer;
import javax.microedition.khronos.egl.EGLConfig;
import c.org.rajawali3d.textures.StreamingTexture;
//import rajawali.renderer.RajawaliRenderer;
public class Vediorenderer extends Renderer implements CardboardView.StereoRenderer {
// video stuff
private MediaPlayer mediaPlayer;
private StreamingTexture videoTexture;
// temporary math variables
/** position and rotation of eye camera in 3d space as matrix object */
private Matrix4 eyeMatrix;
/** rotation of eye camera in 3d space */
private Quaternion eyeOrientation;
/** position of eye camera in 3d space */
private Vector3 eyePosition;
/**
* @param context e.g. an activity
* @param mediaPlayer Fully initialized media player instance with loaded video.
* Make sure to call play/pause by yourself.
*/
public Vediorenderer(Context context, MediaPlayer mediaPlayer){
super(context);
this.mediaPlayer = mediaPlayer;
// init math stuff
eyeMatrix = new Matrix4();
eyeOrientation = new Quaternion();
}
/*========================================================
Override Renderer abstract methods
=========================================================*/
@Override
protected void initScene() {
// setup world sphere
Sphere sphere = new Sphere(1, 24, 24);
sphere.setPosition(0, 0, 0);
// invert the sphere normals
// factor "1" is two small and result in rendering glitches
sphere.setScaleX(100);
sphere.setScaleY(100);
sphere.setScaleZ(-100);
// create texture from media player video
videoTexture = new StreamingTexture("video", this.mediaPlayer);
// set material with video texture
Material material = new Material();
material.setColorInfluence(0f);
try {
material.addTexture(videoTexture);
} catch (Exception e){
throw new RuntimeException(e);
}
sphere.setMaterial(material);
// add sphere to scene
getCurrentScene().addChild(sphere);
}
@Override
public void onRenderSurfaceDestroyed(SurfaceTexture surfaceTexture) {
super.onRenderSurfaceDestroyed(surfaceTexture);
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
}
@Override
public void onTouchEvent(MotionEvent event) {
}
/*========================================================
Override CarboardView abstract methods
=========================================================*/
@Override
public void onNewFrame(HeadTransform headTransform) {
}
@Override
public void onDrawEye(Eye eye) {
// Rajawali camera
Camera currentCamera = getCurrentCamera();
// cardboard field of view
FieldOfView fov = eye.getFov();
// update Rajawali camera from cardboard sdk
currentCamera.updatePerspective(fov.getLeft(), fov.getRight(), fov.getBottom(), fov.getTop());
eyeMatrix.setAll(eye.getEyeView());
// orientation
eyeOrientation.fromMatrix(eyeMatrix);
currentCamera.setOrientation(eyeOrientation);
// position
eyePosition = eyeMatrix.getTranslation().inverse();
currentCamera.setPosition(eyePosition);
// render with Rajawali
super.onRenderFrame(null);
}
@Override
public void onFinishFrame(Viewport viewport) {
}
@Override
public void onSurfaceChanged(int width, int height) {
// tell Rajawali that cardboard sdk detected a size change
super.onRenderSurfaceSizeChanged(null, width, height);
}
@Override
public void onSurfaceCreated(EGLConfig eglConfig) {
// pass opengl config to Rajawali
super.onRenderSurfaceCreated(eglConfig, null, -1, -1);
}
@Override
public void onRendererShutdown() {
// tell Rajawali about shutdown
super.onRenderSurfaceDestroyed(null);
}
@Override
protected void onRender(long elapsedRealTime, double deltaTime) {
super.onRender(elapsedRealTime, deltaTime);
if (videoTexture != null) {
// update texture from video content
videoTexture.update();
}
}
}
.
package com.example.myrajawali;
import android.content.Context;
import android.graphics.SurfaceTexture;
import android.media.MediaPlayer;
import android.view.MotionEvent;
import com.google.vrtoolkit.cardboard.CardboardView;
import com.google.vrtoolkit.cardboard.Eye;
import com.google.vrtoolkit.cardboard.FieldOfView;
import com.google.vrtoolkit.cardboard.HeadTransform;
import com.google.vrtoolkit.cardboard.Viewport;
import org.rajawali3d.cameras.Camera;
import org.rajawali3d.materials.Material;
import org.rajawali3d.math.Matrix4;
import org.rajawali3d.math.Quaternion;
import org.rajawali3d.math.vector.Vector3;
import org.rajawali3d.primitives.Sphere;
import org.rajawali3d.renderer.Renderer;
import javax.microedition.khronos.egl.EGLConfig;
import c.org.rajawali3d.textures.StreamingTexture;
//import rajawali.renderer.RajawaliRenderer;
public class Vediorenderer extends Renderer implements CardboardView.StereoRenderer {
// video stuff
private MediaPlayer mediaPlayer;
private StreamingTexture videoTexture;
// temporary math variables
/** position and rotation of eye camera in 3d space as matrix object */
private Matrix4 eyeMatrix;
/** rotation of eye camera in 3d space */
private Quaternion eyeOrientation;
/** position of eye camera in 3d space */
private Vector3 eyePosition;
/**
* @param context e.g. an activity
* @param mediaPlayer Fully initialized media player instance with loaded video.
* Make sure to call play/pause by yourself.
*/
public Vediorenderer(Context context, MediaPlayer mediaPlayer){
super(context);
this.mediaPlayer = mediaPlayer;
// init math stuff
eyeMatrix = new Matrix4();
eyeOrientation = new Quaternion();
}
/*========================================================
Override Renderer abstract methods
=========================================================*/
@Override
protected void initScene() {
// setup world sphere
Sphere sphere = new Sphere(1, 24, 24);
sphere.setPosition(0, 0, 0);
// invert the sphere normals
// factor "1" is two small and result in rendering glitches
sphere.setScaleX(100);
sphere.setScaleY(100);
sphere.setScaleZ(-100);
// create texture from media player video
videoTexture = new StreamingTexture("video", this.mediaPlayer);
// set material with video texture
Material material = new Material();
material.setColorInfluence(0f);
try {
material.addTexture(videoTexture);
} catch (Exception e){
throw new RuntimeException(e);
}
sphere.setMaterial(material);
// add sphere to scene
getCurrentScene().addChild(sphere);
}
@Override
public void onRenderSurfaceDestroyed(SurfaceTexture surfaceTexture) {
super.onRenderSurfaceDestroyed(surfaceTexture);
mediaPlayer.stop();
mediaPlayer.release();
}
@Override
public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset) {
}
@Override
public void onTouchEvent(MotionEvent event) {
}
/*========================================================
Override CarboardView abstract methods
=========================================================*/
@Override
public void onNewFrame(HeadTransform headTransform) {
}
@Override
public void onDrawEye(Eye eye) {
// Rajawali camera
Camera currentCamera = getCurrentCamera();
// cardboard field of view
FieldOfView fov = eye.getFov();
// update Rajawali camera from cardboard sdk
currentCamera.updatePerspective(fov.getLeft(), fov.getRight(), fov.getBottom(), fov.getTop());
eyeMatrix.setAll(eye.getEyeView());
// orientation
eyeOrientation.fromMatrix(eyeMatrix);
currentCamera.setOrientation(eyeOrientation);
// position
eyePosition = eyeMatrix.getTranslation().inverse();
currentCamera.setPosition(eyePosition);
// render with Rajawali
super.onRenderFrame(null);
}
@Override
public void onFinishFrame(Viewport viewport) {
}
@Override
public void onSurfaceChanged(int width, int height) {
// tell Rajawali that cardboard sdk detected a size change
super.onRenderSurfaceSizeChanged(null, width, height);
}
@Override
public void onSurfaceCreated(EGLConfig eglConfig) {
// pass opengl config to Rajawali
super.onRenderSurfaceCreated(eglConfig, null, -1, -1);
}
@Override
public void onRendererShutdown() {
// tell Rajawali about shutdown
super.onRenderSurfaceDestroyed(null);
}
@Override
protected void onRender(long elapsedRealTime, double deltaTime) {
super.onRender(elapsedRealTime, deltaTime);
if (videoTexture != null) {
// update texture from video content
videoTexture.update();
}
}
}