package com.leejz.recyclerviewcomplex;
import android.content.ContentResolver;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.DrawableRes;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.TextureView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import com.asha.vrlib.MDVRLibrary;
import com.asha.vrlib.model.MDRay;
import com.asha.vrlib.plugins.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 Lijizhou on 2016/2/21.
* 代码解析BLOG: http://blog.csdn.net/leejizhou/article/details/50708349
* QQ 3107777777
*/
public class RecyclerViewActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private MDVRLibrary mVRLibrary;
int mfirstVisiblePosition;
int firstVisiblePosition;
Uri nextUri;
GLSurfaceView glSurfaceView;
private Handler sMainHandler;
private String[] title = {"Blog : http://blog.csdn.net/Leejizhou.",
"A good laugh and a long sleep are the best cures in the doctor's book.",
"all or nothing, now or never ",
"Be nice to people on the way up, because you'll need them on your way down.",
"Be confident with yourself and stop worrying what other people think. Do what's best for your future happiness!",
"Blessed is he whose fame does not outshine his truth.",
"Create good memories today, so that you can have a good past"
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recyclerview);
mRecyclerView=(RecyclerView)findViewById(R.id.rv_list);
glSurfaceView = (GLSurfaceView) findViewById(R.id.gl_view);
nextUri = getDrawableUri(R.drawable.bitmap360);
sMainHandler = new Handler(getMainLooper());
if (getIntent().getIntExtra("type", 0) == 1){
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(layoutManager);
}else if(getIntent().getIntExtra("type", 0) == 2){
mRecyclerView.setLayoutManager(new GridLayoutManager(this, 2));
}
final LinearLayoutManager layoutManager =(LinearLayoutManager) mRecyclerView.getLayoutManager();
final Runnable updatelayoutRunnalbe = new Runnable() {
@Override
public void run() {
glSurfaceView.setVisibility(View.VISIBLE);
updateLayout(layoutManager);
}
};
mRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if(newState ==RecyclerView.SCROLL_STATE_IDLE){
if( mfirstVisiblePosition != layoutManager.findFirstCompletelyVisibleItemPosition()){
glSurfaceView.setVisibility(View.GONE);
nextUri = getDrawableUri(R.drawable.texture);
mVRLibrary.notifyPlayerChanged();
mfirstVisiblePosition = layoutManager.findFirstCompletelyVisibleItemPosition();
sMainHandler.removeCallbacks(updatelayoutRunnalbe);
sMainHandler.postDelayed(updatelayoutRunnalbe, 1000);
}
if(firstVisiblePosition != layoutManager.findFirstVisibleItemPosition()){
glSurfaceView.setVisibility(View.GONE);
firstVisiblePosition = layoutManager.findFirstVisibleItemPosition();
}else{
sMainHandler.removeCallbacks(updatelayoutRunnalbe);
sMainHandler.postDelayed(updatelayoutRunnalbe, 1000);
}
}else if(newState ==RecyclerView.SCROLL_STATE_SETTLING){
glSurfaceView.setVisibility(View.GONE);
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
if(glSurfaceView.getVisibility() == View.VISIBLE){
updateLayout(layoutManager);
}
}
});
mRecyclerView.setAdapter(new RecyclerViewAdapter(this, title));
glSurfaceView.setVisibility(View.GONE);
sMainHandler.postDelayed(updatelayoutRunnalbe, 1000);
mVRLibrary = createVRLibrary();
}
private void updateLayout(RecyclerView.LayoutManager layoutManager){
View view = layoutManager.findViewByPosition(mfirstVisiblePosition);
if(view != null) {
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) glSurfaceView.getLayoutParams();
params.width = view.getWidth();
params.height = view.getHeight();
params.topMargin = view.getTop();
params.leftMargin = view.getLeft();
params.rightMargin = view.getRight();
glSurfaceView.setLayoutParams(params);
}
}
protected MDVRLibrary createVRLibrary() {
return MDVRLibrary.with(this)
.displayMode(MDVRLibrary.DISPLAY_MODE_NORMAL)
.interactiveMode(MDVRLibrary.INTERACTIVE_MODE_MOTION)
.asBitmap(new MDVRLibrary.IBitmapProvider() {
@Override
public void onProvideBitmap(final MD360BitmapTexture.Callback callback) {
loadImage(nextUri, callback);
}
})
.pinchEnabled(true)
.build(R.id.gl_view);
}
private Target mTarget;
private void loadImage(Uri uri, final MD360BitmapTexture.Callback callback){
mTarget = new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
// notify if size changed
mVRLibrary.onTextureResize(bitmap.getWidth(),bitmap.getHeight());
// texture
callback.texture(bitmap);
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
};
Picasso.with(getApplicationContext()).load(uri).resize(3072,2048).centerInside().memoryPolicy(NO_CACHE, NO_STORE).into(mTarget);
}
@Override
protected void onDestroy() {
super.onDestroy();
mVRLibrary.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
mVRLibrary.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
mVRLibrary.onPause(this);
}
private Uri getDrawableUri(@DrawableRes int resId){
Resources resources = getResources();
return Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + resources.getResou
没有合适的资源?快使用搜索试试~ 我知道了~
结合MD360Player4Android做的仿优酷vr做的list显示全景图片demo
共62个文件
xml:28个
png:7个
java:6个
需积分: 49 38 下载量 143 浏览量
2016-11-04
15:22:29
上传
评论 1
收藏 1.37MB RAR 举报
温馨提示
本demo是结合github上的MD360player4Android全景显示的库做的坊优酷vr的列表显示全景图片,要安卓手机支持陀螺仪才可看到效果
资源推荐
资源详情
资源评论
收起资源包目录
RecyclerViewComplex.rar (62个子文件)
RecyclerViewComplex
gradlew.bat 2KB
gradlew 5KB
gradle.properties 872B
.gradle
2.8
taskArtifacts
fileHashes.bin 234KB
cache.properties.lock 17B
taskArtifacts.bin 85KB
fileSnapshots.bin 2.37MB
cache.properties 31B
outputFileStates.bin 21KB
app
proguard-rules.pro 661B
src
test
java
com
leejz
recyclerviewcomplex
ExampleUnitTest.java 336B
androidTest
java
com
leejz
recyclerviewcomplex
ApplicationTest.java 372B
main
res
mipmap-xxxhdpi
ic_launcher.png 10KB
drawable
bitmap360.jpg 160KB
texture.png 1001KB
mipmap-hdpi
ic_launcher.png 3KB
values
colors.xml 214B
strings.xml 85B
styles.xml 394B
dimens.xml 216B
mipmap-xxhdpi
ic_launcher.png 8KB
lighthouse.png 18KB
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_recyclerview.xml 623B
item2.xml 979B
activity_main.xml 817B
item1.xml 1KB
vr_moive_fragment_gridview_item.xml 1KB
values-w820dp
dimens.xml 364B
java
com
leejz
recyclerviewcomplex
RecyclerViewAdapter.java 3KB
RecyclerViewActivity.java 8KB
MainActivity.java 1KB
ReAdapter.java 1KB
AndroidManifest.xml 760B
app.iml 9KB
.gitignore 8B
build.gradle 875B
libs
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 230B
.idea
gradle.xml 626B
runConfigurations.xml 564B
misc.xml 3KB
copyright
profiles_settings.xml 76B
modules.xml 375B
encodings.xml 159B
compiler.xml 686B
workspace.xml 213KB
libraries
MD360Player4Android_2_1_0.xml 440B
support_annotations_23_1_1.xml 525B
picasso_2_5_2.xml 522B
recyclerview_v7_23_1_1.xml 794B
cardview_v7_23_1_1.xml 595B
hamcrest_core_1_3.xml 526B
support_v4_23_1_1.xml 918B
junit_4_12.xml 477B
appcompat_v7_23_1_1.xml 776B
.gitignore 105B
local.properties 528B
settings.gradle 16B
build.gradle 565B
RecyclerViewComplex.iml 950B
共 62 条
- 1
资源评论
huoyingrenzhe01
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功