Ошибка надувания класса com.google.vrtoolkit.cardboard.CardboardView вылетает приложение - PullRequest
0 голосов
/ 24 сентября 2019

нет ошибки сборки, но происходит сбой при запуске на эмуляторе.

--------- начало сбоя E / AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.myrajawali, PID: 6166 java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.example.myrajawali / com.example.myrajawali.MainActivity}: android.view.InflateException: строка двоичного файла XML № 9 в com.example.myrajawali:layout / activity_main: строка двоичного XML-файла # 9 в com.example.myrajawali: layout / activity_main: ошибка надувания класса com.google.vrtoolkit.cardboard.CardboardView в android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3270) на андроиде.app.ActivityThread.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: строка двоичного файла XML # 9 в com.example.myrajawali: layout / activity_main: строка двоичного файла XML № 9 в com.example.myrajawali: layout / activity_main: ошибка надувания класса com.google.vrtoolkit.cardboard.CardboardView Причина: android.view.InflateException: строка двоичного XML-файла # 9 в com.example.myrajawali: layout / activity_main: ошибка надувания класса 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.romgateflafla (.java: 961) на android.view.LayoutInflater.rInflate (LayoutInflater.java:1123) на android.view.LayoutInflater.rInflateChildren (LayoutInflater.java:1084) на android.view.LayoutInflater.inflate (LayoutInflater).на 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) * 10031004 *

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();
        }
    }

}

1 Ответ

0 голосов
/ 24 сентября 2019

android.view.InflateException

Эта ошибка возникает при возникновении проблем в файле макета XML.Ошибка возникает в строке № 9 вашего activity_main, где вы используете CardboardView из com.google.vrtoolkit.cardboard.CardboardView.

Возможно ошибка, что макет XML не надувается должным образом для просмотра.Вы должны проверить, правильно ли добавлена ​​библиотека в build.gradle.

Кроме того, выполните Clean Project и Rebuild Project.

...