它没有构建错误,但是在模拟器上运行时崩溃。
---------崩溃开始 E / AndroidRuntime:致命异常:main 流程:com.example.myrajawali,PID:6166 java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.myrajawali / com.example.myrajawali.MainActivity}:android.view.InflateException:com.example.myrajawali:layout / activity_main中的二进制XML文件第9行: com.example.myrajawali:layout / activity_main中的二进制XML文件第9行:膨胀类com.google.vrtoolkit.cardboard.CardboardView时出错 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 在android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 在android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:2016) 在android.os.Handler.dispatchMessage(Handler.java:107) 在android.os.Looper.loop(Looper.java:214) 在android.app.ActivityThread.main(ActivityThread.java:7356) 在java.lang.reflect.Method.invoke(本机方法) 在com.android.internal.os.RuntimeInit $ MethodAndArgsCaller.run(RuntimeInit.java:492) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) 原因:android.view.InflateException:com.example.myrajawali:layout / activity_main中的二进制XML文件第9行:com.example.myrajawali:layout / activity_main中的二进制XML文件第9行:膨胀类com.google的错误。 vrtoolkit.cardboard.CardboardView 原因:android.view.InflateException:com.example.myrajawali:layout / activity_main中的二进制XML文件第9行:膨胀类com.google.vrtoolkit.cardboard.CardboardView时出错 造成原因:java.lang.reflect.InvocationTargetException 在java.lang.reflect.Constructor.newInstance0(本地方法) 在java.lang.reflect.Constructor.newInstance(Constructor.java:343) 在android.view.LayoutInflater.createView(LayoutInflater.java:854) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006) 在android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) 在android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) 在android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 在android.view.LayoutInflater.inflate(LayoutInflater.java:682) 在android.view.LayoutInflater.inflate(LayoutInflater.java:534) 在android.view.LayoutInflater.inflate(LayoutInflater.java:481) 在com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:438) 在android.app.Activity.setContentView(Activity.java:3324) 在com.example.myrajawali.MainActivity.onCreate(MainActivity.java:23) 在android.app.Activity.performCreate(Activity.java:7802) 在android.app.Activity.performCreate(Activity.java:7791) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) 在android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
<?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
<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>
MainActivity.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();
}
}
}
VedioRenderer.java
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();
}
}
}
答案 0 :(得分:0)
android.view.InflateException
当XML布局文件中存在任何问题时,将发生此错误。
错误发生在您的activity_main
的第9行上,而您正在使用CardboardView
的{{1}}。
可能出现XML布局无法正确膨胀以查看的错误。您必须检查库是否已正确添加到com.google.vrtoolkit.cardboard.CardboardView
中。
还要执行build.gradle
和Clean Project
。