package com.asha.md360player4android; import android.content.ContentResolver; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.util.Log; import android.view.View; import com.asha.vrlib.MDVRLibrary; import com.asha.vrlib.model.MDRay; import com.asha.vrlib.plugins.hotspot.IMDHotspot; import com.asha.vrlib.texture.MD360BitmapTexture; import com.squareup.picasso.Picasso; import com.squareup.picasso.Target; import static com.squareup.picasso.MemoryPolicy.NO_CACHE; import static com.squareup.picasso.MemoryPolicy.NO_STORE; /** * Created by hzqiujiadi on 16/4/5. * hzqiujiadi ashqalcn@gmail.com */ public class BitmapPlayerActivity extends MD360PlayerActivity { private static final String TAG = "BitmapPlayerActivity"; private Uri nextUri; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findViewById(R.id.control_next).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { busy(); nextUri = getDrawableUri(R.drawable.texture); getVRLibrary().notifyPlayerChanged(); } }); } private Target mTarget;// keep the reference for picasso. private void loadImage(Uri uri, final MD360BitmapTexture.Callback callback){ mTarget = new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { Log.d(TAG, "loaded image, size:" + bitmap.getWidth() + "," + bitmap.getHeight()); // notify if size changed getVRLibrary().onTextureResize(bitmap.getWidth(), bitmap.getHeight()); // texture callback.texture(bitmap); cancelBusy(); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }; Log.d(TAG, "load image with max texture size:" + callback.getMaxTextureSize()); Picasso.with(getApplicationContext()) .load(uri) .resize(callback.getMaxTextureSize(),callback.getMaxTextureSize()) .onlyScaleDown() .centerInside() .memoryPolicy(NO_CACHE, NO_STORE) .into(mTarget); } private Uri currentUri(){ if (nextUri == null){ return getUri(); } else { return nextUri; } } @Override protected MDVRLibrary createVRLibrary() { return MDVRLibrary.with(this) .displayMode(MDVRLibrary.DISPLAY_MODE_NORMAL) .interactiveMode(MDVRLibrary.INTERACTIVE_MODE_TOUCH) .asBitmap(new MDVRLibrary.IBitmapProvider() { @Override public void onProvideBitmap(final MD360BitmapTexture.Callback callback) { loadImage(currentUri(), callback); } }) .listenTouchPick(new MDVRLibrary.ITouchPickListener() { @Override public void onHotspotHit(IMDHotspot hitHotspot, MDRay ray) { Log.d(TAG,"Ray:" + ray + ", hitHotspot:" + hitHotspot); } }) .pinchEnabled(true) .projectionFactory(new CustomProjectionFactory()) .build(R.id.gl_view); } private Uri getDrawableUri(@DrawableRes int resId){ Resources resources = getResources(); return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + resources.getResourcePackageName(resId) + '/' + resources.getResourceTypeName(resId) + '/' + resources.getResourceEntryName(resId) ); } }