Android google VR全景圖導航
阿新 • • 發佈:2019-01-04
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; } } }