1. 程式人生 > >Android google VR全景圖導航

Android google VR全景圖導航

package palmartourism.iwiteks.www.hiqdn;

import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.vr.sdk.widgets.pano.VrPanoramaEventListener;
import com.google.vr.sdk.widgets.pano.VrPanoramaView;

import java.io.IOException;
import java.io.InputStream;

import palmartourism.iwiteks.www.util.StatusBarUtil;

/**
 * Created by spirits on 2018/1/16.
 */

public class MainActivity extends AppCompatActivity {


    private VrPanoramaView vrPanoramaView;
    private ImageTask imageTask;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        StatusBarUtil.transparentStatusBar(this);
        setContentView(R.layout.activity_vr);
        
        //全景圖片的瀏覽功能
        //步驟一。下載github上google開源 vr-sdk
        //1.1.匯入到我們的工作空間 common,commonwidget  panowidget
        //1.2.依賴到我們的專案中
        //1.3.依賴sdk中找不到的api
        //1.4.準備一些測試素材 放置在assets目錄下面 例:assets/a.jpg
        //1.5.開啟記憶體設定  android:largeHeap="true"儘可能使應用使用最大記憶體
        //步驟二。將全景圖片載入到記憶體中,再顯示在控制元件
        //2.1.佈局全景圖片顯示控制元件
        vrPanoramaView = (VrPanoramaView) findViewById(R.id.vr_pv);

        //刪除不需要連線 資訊按鈕禁掉
        vrPanoramaView.setInfoButtonEnabled(false);
        //隱藏全屏按鈕
        vrPanoramaView.setFullscreenButtonEnabled(false);
        //設定隱藏立體模型的按鈕
        vrPanoramaView.setStereoModeButtonEnabled(false);
        //開啟手觸模式
        vrPanoramaView.setTouchTrackingEnabled(true);
        //眼鏡模式按鈕禁掉
        vrPanoramaView.setStereoModeButtonEnabled(false);

        //2.2.所有的圖片在記憶體表示成Bitmap
        imageTask = new ImageTask();
        imageTask.execute();
        //vrPanoramaView.loadImageFromBitmap(bitmap);
    }

    //2.3.AsyncTask非同步載入
    private class ImageTask extends AsyncTask<Void, Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(Void... params) {
            try {
                InputStream inputStream = getAssets().open("andes.jpg");
                //2.4.使用BitmapFactory 可以sd ,byte[] inputstream-->Bitmap
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                return bitmap;
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(Bitmap bitmap) {
            super.onPostExecute(bitmap);
            if (bitmap != null) {
                //loadImageFromBitmap載入bitmap到顯示控制元件 參1.bitmap 參2 顯示引數的封裝
                VrPanoramaView.Options option = new VrPanoramaView.Options();
                //立體圖片:上半張顯示在左眼,下半張顯示在右眼
                //TYPE_STEREO_OVER_UNDER  TYPE_MONO
                option.inputType = VrPanoramaView.Options.TYPE_MONO;
                VrPanoramaEventListener listener=new VrPanoramaEventListener(){
                    @Override
                    public void onLoadSuccess() {
                        super.onLoadSuccess();
                        //成功的情況提示下現在要進行全景圖片的展示
//                        Toast.makeText(MainActivity.this, "進入vr圖片", Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onLoadError(String errorMessage) {
                        super.onLoadError(errorMessage);
                        //處理載入失敗的情況
                        Toast.makeText(MainActivity .this, "E:"+errorMessage, Toast.LENGTH_SHORT).show();
                    }
                };
                //2.5.增加加載出錯的業務邏輯處理
                vrPanoramaView.setEventListener(listener);
                //2.6.全屏展示
//                vrPanoramaView.setDisplayMode(VrWidgetView.DisplayMode.FULLSCREEN_MONO);
                //2.4.載入bitmap到控制元件上顯示
                vrPanoramaView.loadImageFromBitmap(bitmap, option);
            }
        }
    }
    //步驟三。優化程式細節 ,頁面退到後臺,暫停顯示 ,頁面顯示在螢幕 恢復顯示。銷燬頁面,釋放全景圖片

    //3.1 頁面退到後臺,暫停顯示
    @Override
    protected void onPause() {
        super.onPause();
        if(vrPanoramaView!=null)
        {
            vrPanoramaView.pauseRendering();
        }
    }
    //3.2 頁面顯示在螢幕 恢復顯示
    @Override
    protected void onResume() {
        super.onResume();
        if(vrPanoramaView!=null)
        {
            vrPanoramaView.resumeRendering();
        }
    }
    //3.3.銷燬頁面,釋放全景圖片
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (vrPanoramaView != null) {
            vrPanoramaView.shutdown();
        }
        if (imageTask != null && !imageTask.isCancelled()) {
            imageTask.cancel(true);
            imageTask = null;
        }
    }
}