Android移动开发-VR全景照片简单实现

android:id=“@+id/my_vr_view”>

</com.google.vr.sdk.widgets.pano.VrPanoramaView>

MainActivity文件,在应用运行时,读取assets文件中的素材pic.jpg,调用makeimageToByte方法转换格式。

Options是VrPanoramaView所需的设置,设置TYPE_MONO,图像被预期以覆盖沿着其水平轴360度,使图片可以360水平旋转。

若使用VR设备,可以设置TYPE_STEREO_OVER_UNDER,将图片分割成重合度很高两部分,分别对应左眼与右眼。

public class MainActivity extends AppCompatActivity {

/**

  • vr控件

*/

private VrPanoramaView vrpview;

/**

  • byte格式

*/

private Bitmap bitmap = null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

vrpview = (VrPanoramaView) findViewById(R.id.my_vr_view);

VrPanoramaView.Options options = new VrPanoramaView.Options();

options.inputType = VrPanoramaView.Options.TYPE_MONO;

vrpview.setStereoModeButtonEnabled(false);//隐藏全屏模式

vrpview.setInfoButtonEnabled(false);//隐藏信息按钮

String uri = “pic.jpg”;

vrpview.loadImageFromByteArray(makeimageToByte(uri), options);

vrpview.setEventListener(new VrPanoramaEventListener(){

@SuppressLint(“ShowToast”)

@Override

public void onLoadSuccess() {

//加载成功

super.onLoadSuccess();

Toast.makeText(MainActivity.this, “加载完成”, Toast.LENGTH_SHORT).show();

}

@SuppressLint(“ShowToast”)

@Override

public void onLoadError(String errorMessage) {

//加载失败

super.onLoadError(errorMessage);

Toast.makeText(MainActivity.this, “加载失败”, Toast.LENGTH_SHORT).show();

}

@SuppressLint(“ShowToast”)

@Override

public void onClick() {

//点击事件

super.onClick();

Toast.makeText(MainActivity.this, “点击了全景”, Toast.LENGTH_SHORT).show();

}

@SuppressLint(“ShowToast”)

@Override

public void onDisplayModeChanged(int newDisplayMode) {

//切换模式

super.onDisplayModeChanged(newDisplayMode);

Toast.makeText(MainActivity.this, “改变显示模式”, Toast.LENGTH_SHORT).show();

}

});

}

makeimageToByte方法,通过getAssets()读取assets文件。

public byte[] makeimageToByte(String path){

byte[] data = null;

InputStream input = null;

ByteArrayOutputStream output = null;

try {

input = getAssets().open(path);

output = new ByteArrayOutputStream();

byte[] buf = new byte[1024];

int numBytesRead;

while ((numBytesRead = input.read(buf)) != -1) {

output.write(buf, 0, numBytesRead);

}

data = output.toByteArray();

} catch (IOException ex1) {

ex1.printStackTrace();

} finally {

try {

if (input != null) {

input.close();

}

if (output != null) {

output.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return data;

}

需要注意的是,assets文件的目录一定要与res和java同级,否则素材无法被读取,软件运行时没有对应的图片显示。

查看方法:切换到Project->app->src->main

在这里插入图片描述

最后,复写处理资源的方法,加载图片与回收资源等

/**

  • 渲染3D

*/

@Override

protected void onResume() {

super.onResume();

if (vrpview != null){

vrpview.resumeRendering();

最后笔者收集整理了一份Flutter高级入门进阶资料PDF

以下是资料目录和内容部分截图



里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。


《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!
8881666)]
[外链图片转存中…(img-8ewixgl6-1714558881669)]
里面包括详细的知识点讲解分析,带你一个星期入门Flutter。还有130个进阶学习项目实战视频教程,让你秒变大前端。

[外链图片转存中…(img-wtDUrV9p-1714558881672)]
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值