Java 在我的应用程序中使用街景虚拟现实

Java 在我的应用程序中使用街景虚拟现实,java,android,virtual-reality,google-street-view,Java,Android,Virtual Reality,Google Street View,我正在使用Android Studio,并尝试在VR中显示一些选定的街景路径。我已经有街景运行良好,现在我正试图在虚拟现实中显示它 我已经将com.google.vr.sdk.widgets.pano.VrPanoramaView放在布局中,在我的类的onCreate中,通过findviewbyd将其引用到VrPanoramaView变量。现在我试图显示一个调用我在这个类中定义的方法loadPanoImage的图像。此方法从存储器加载图像,并通过loadImageFromBitmap显示图像 问

我正在使用Android Studio,并尝试在VR中显示一些选定的街景路径。我已经有街景运行良好,现在我正试图在虚拟现实中显示它

我已经将
com.google.vr.sdk.widgets.pano.VrPanoramaView
放在布局中,在我的类的onCreate中,通过
findviewbyd
将其引用到
VrPanoramaView
变量。现在我试图显示一个调用我在这个类中定义的方法loadPanoImage的图像。此方法从存储器加载图像,并通过
loadImageFromBitmap
显示图像

问题是它无法显示任何内容,即使我遵循了指南,并且我已经按照显示的方式完成了所有操作。我甚至尝试在代码的不同部分调用它(在执行任何其他操作之前、单击按钮之前、显示streetview之前和之后),但我不明白为什么它不工作,以及如何使用它显示从streetview拍摄的图像(我不知道我是否能够以友好的方式完成它,或者我应该下载它们并将它们放入存储器中)

我把部分代码作为参考:

public class VrExperience extends FragmentActivity {

    Button buttonCitta;
    Button buttonMare;
    Button buttonMontagna;
    TextView titleTextView;

    // George St, Sydney
    private static final LatLng SYDNEY = new LatLng(-33.87365, 151.20689);
    // LatLng with no panorama
    private static final LatLng INVALID = new LatLng(-45.125783, 151.276417);

    //VrPanoramaView is inserted in the layout
    private VrPanoramaView panoWidgetView;
    //StreetViewPanorama is another class in my project which shows Street View
    private StreetViewPanorama mStreetViewPanorama;


    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_vrexperiences);

        panoWidgetView = (VrPanoramaView) findViewById(R.id.pano_view);
        panoWidgetView.setEventListener(new VrPanoramaEventListener());

        //download image and show it, but it doesn't show anything
        loadPanoImage();

        titleTextView = (TextView) findViewById(R.id.titleTextView);

        buttonCitta = (Button) findViewById(R.id.buttonCitta);
        buttonCitta.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                if (!checkReady()) {
                    return;
                }
                titleTextView.setVisibility(View.GONE);
                buttonCitta.setVisibility(View.GONE);
                buttonMare.setVisibility(View.GONE);
                buttonMontagna.setVisibility(View.GONE);
                loadPanoImage();    //it doesn't show anything
                mStreetViewPanorama.setPosition(SYDNEY);
                loadPanoImage();    //it doesn't show anything
            }
        }};

        //code for buttonMontagna and buttonMare as well, it's identical

        SupportStreetViewPanoramaFragment streetViewPanoramaFragment =
            (SupportStreetViewPanoramaFragment)
                    getSupportFragmentManager().findFragmentById(R.id.streetviewpanorama);

        streetViewPanoramaFragment.getStreetViewPanoramaAsync(
                new OnStreetViewPanoramaReadyCallback() {
                    @Override
                    public void onStreetViewPanoramaReady(StreetViewPanorama panorama) {
                        mStreetViewPanorama = panorama;
                        // Only set the panorama to INVALID on startup (when no panoramas have been
                        // loaded which is when the savedInstanceState is null).
                        if (savedInstanceState == null) {
                            mStreetViewPanorama.setPosition(INVALID);
                        }
                    }
                });

    }

    /**
     * When the panorama is not ready the PanoramaView cannot be used. This should be called on
     * all entry points that call methods on the Panorama API.
     */
    private boolean checkReady() {
        if (mStreetViewPanorama == null)
            return false;

        return true;
    }

    /**
     * Called when the Animate To Invalid button is clicked.
     */
    public void onGoToInvalid(View view) {
        if (!checkReady()) {
            return;
        }
        mStreetViewPanorama.setPosition(INVALID);
    }

    //retrieves image from the assets folder and loads it into the VrPanoramaView
    private void loadPanoImage() {
        VrPanoramaView.Options options = new VrPanoramaView.Options();
        InputStream inputStream = null;
        AssetManager assetManager = getAssets();

        try {
            inputStream = assetManager.open("demo2.jpg");
            options.inputType = VrPanoramaView.Options.TYPE_MONO;
            panoWidgetView.loadImageFromBitmap(
                BitmapFactory.decodeStream(inputStream), options
            );
            inputStream.close();
        } catch (IOException e) {
            Log.e("Fail", "Exception in loadPanoImage" + e.getMessage());
        }
    }

    @Override
    protected void onPause() {
        panoWidgetView.pauseRendering();
        super.onPause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        panoWidgetView.resumeRendering();
    }

    @Override
    protected void onDestroy() {
        panoWidgetView.shutdown();
        super.onDestroy();
    }

}
这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/vrExperienceActivity"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <com.google.vr.sdk.widgets.pano.VrPanoramaView
        android:id="@+id/pano_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="5dip"
        android:layout_weight="5"
        android:scrollbars="none" />

    <TextView
        android:id="@+id/titleTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/white"
        android:text="VR Experience"
        android:textAlignment="center"
        android:textAppearance="@android:style/TextAppearance.Large"
        android:textColor="#0000F0"
        android:visibility="visible" />

    <Button
        android:id="@+id/buttonCitta"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Città" />

    <fragment
        class="com.google.android.gms.maps.SupportStreetViewPanoramaFragment"
        android:id="@+id/streetviewpanorama"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

编辑:@LucioB
a) 这些地方我试着称之为loadPanoImage,但它们都没有显示任何东西。当调用该方法时,程序将继续执行其他任务。我希望在点击按钮时,图像可以直接在VR中显示,或者如果无法在街景模式下添加经典的纸板按钮,则可以传递到VR视图。
b) 我的意思是代码没有达到我期望的效果。我认为,一旦我在布局中创建了VrPanoramaView,并使用它通过
显示图像。loadImageFromBitmap
它就会显示我从资产加载的图像(我有一个保存在虚拟SD上的图像),并且一旦我能够对单个图像执行此操作,我就会找到一种在整个路径上执行此操作的方法。
代码没有给出任何异常,我认为我犯了一个逻辑错误,或者我不理解VR api是如何工作的


编辑:我发现java代码正在运行,问题在于布局不允许查看VrPanoramaView,因为它被StreetViewPanorama遮挡了

Hi@OrokyC!为了帮助您,我需要知道一些事情:a)为什么在三个地方调用loadPanoImage()?哪一个是正确的?我想这是onClick处理器的最后一行了。b) 你说代码不起作用是什么意思?你有例外吗?您是否尝试过调试它,并查看它在哪里中断?通过编辑原始问题添加此解释,以便我们可以帮助您了解问题的原因。谢谢