错误膨胀类 com.google.vrtoolkit.cardboard.CardboardView 崩溃应用程序
Posted
技术标签:
【中文标题】错误膨胀类 com.google.vrtoolkit.cardboard.CardboardView 崩溃应用程序【英文标题】:Error inflating class com.google.vrtoolkit.cardboard.CardboardView crashes application 【发布时间】:2020-01-24 06:49:10 【问题描述】:它没有构建错误,但是当我在模拟器上运行时崩溃。
--------- 崩溃开始 E/androidRuntime: 致命异常: main 进程:com.example.myrajawali,PID:6166 java.lang.RuntimeException:无法启动活动 ComponentInfocom.example.myrajawali/com.example.myrajawali.MainActivity:android.view.InflateException:com.example.myrajawali 中的二进制 XML 文件第 9 行:layout/activity_main: 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>
主活动
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="@android:color/black"
tools:context=".MainActivity">
<com.google.vrtoolkit.cardboard.CardboardView
android:id="@+id/cardboard_view"
android:layout_
android:layout_/>
</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();
【问题讨论】:
似乎无法在您的 xml 上找到 com.google.vrtoolkit.cardboard.CardboardView 您是否已将此项目类(库或依赖项)添加到您的项目中? rajawali 库在内部扩展它,如果我尝试添加 cardboard sdk,它会抛出重复的类 【参考方案1】:android.view.InflateException
当您的 XML 布局文件中存在任何问题时,会发生此错误。
错误发生在您的 activity_main
的第 9 行,您使用的是 CardboardView
的 com.google.vrtoolkit.cardboard.CardboardView
。
XML 布局未正确膨胀以查看的错误的可能性。您必须检查库是否在build.gradle
中正确添加。
另外,Clean Project
和 Rebuild Project
。
【讨论】:
以上是关于错误膨胀类 com.google.vrtoolkit.cardboard.CardboardView 崩溃应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Android错误膨胀类android.support.constraint.ConstraintLayout
错误:膨胀类 com.google.android.material.textfield.TextInputLayout