Articles of surfaceview

重新启动/暂停onResume / onPause中的线程

我有一个使用SurfaceView实现来显示对象的游戏。 我有一个线程绘制SurfaceView时间到屏幕。 游戏正在运行。 不幸的是,每当游戏中断时,都需要暂停function。 那么,我知道我需要操纵onResume和onPause 。 但是我不明白。 这个错误指出我已经回到了surfaceCreated ,在那里我开始线程告诉我线程已经启动了。 我尝试使用resume并suspend在onResume和onPause但没有任何改变。 我怎样才能做到这一点? 我已经完成了如何使用File-I / O处理来保存对象的位置。 提前致谢。

Android – 拍照不预览

我试图在没有预览的情况下拍摄一张照片,当我的应用程序开始运行时,立即拍摄一张照片,然后将照片保存到根文件夹中的新文件夹 – “pictures123”中。 有人能告诉我在我的代码中有什么问题吗? @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); File directory = new File(Environment.getExternalStorageDirectory() + "/pictures123/"); if (!directory.exists()) { directory.mkdir(); } Camera camera = Camera.open(0); Camera.Parameters parameters = camera.getParameters(); parameters.setPictureFormat(ImageFormat.JPEG); camera.setParameters(parameters); SurfaceView mview = new SurfaceView(getBaseContext()); camera.setPreviewDisplay(mview.getHolder()); camera.setPreviewDisplay(null); camera.startPreview(); camera.takePicture(null,null,photoCallback); camera.stopPreview(); } Camera.PictureCallback photoCallback=new Camera.PictureCallback() { public void onPictureTaken(byte[] data, Camera camera) […]

检测Android SurfaceView是否正在绘制/移动

我正在使用libvlc和android应用程序播放networkingstream; 本地代码在surfaceview上绘制图像。 让我们假设video停止,我没有访问本机代码,如何检测SurfaceView是否仍在移动(video不冻结)? 我试过getViewTreeObserver()。addOnDrawListener(); 和getViewTreeObserver()。addOnPreDrawListener(); 但他们没有我正在寻找的效果。 谢谢

getSupportedPictureSize()返回一个Nexus4实际不支持的值

我已经扩展了一个SurfaceView来显示一个非常简单的摄像头应用程序的摄像头。 为了find每个设备的最佳预览尺寸,我使用了几乎所有我见过的开源相机应用程序中使用的示例代码: List<Camera.Size> sizes = parameters.getSupportedPreviewSizes(); double minDiff = Double.MAX_VALUE; for (Camera.Size size : sizes) { if (Math.abs(size.width – width) < minDiff) { screenWidth = size.width; screenHeight = size.height; minDiff = Math.abs(size.width – width); } } 一切都完美到这一点。 现在,由于应用程序的性质,我必须在会话过程中保留两个位图,并且为了简单起见(避免了testing期间的内存问题),我使用了PICTURE SIZE的相同代码getSupportedPreviewSizes()与getSupportedPictureSizes())。 在大多数设备上,一切都很好用,但是我必须select其他方式来为每个设备select最佳的图片尺寸。 最近,在Nexus 4设备上进行testing时,上面的这个循环无法select最佳的图片尺寸。 经过调查,我发现getSupportedPictureSizes()函数返回一个值,即1280 * 960,Nexus 4相机实际上不支持该值。 那么,如何解决这个问题呢? 我的意思是,这个function是不是应该只返回设备CAMERA支持的那些值? 我相信会有其他设备有相同的问题,我将无法testing。 任何线索应该如何解决这个问题? 更新:发生了什么是它接受错误的参数没有任何错误,它返回的图像是扭曲的,我也会尝试在这里得到一个图片。 另外,没有运行时exception。

SurfaceView与纹理视图相机?

我想在我的应用程序中join相机function,这将允许视图本身的布局转换,更改其大小,预览大小以及高效地处理方向更改。 我应该使用TextureView还是SurfaceView ? 决定决定..

android视图或surfaceView,我应该使用?

我一直在试图做一个可滚动/可缩放的应用程序,除了绘制位图以外,一切都变好了。 这是一个非常大的图像(由4096年6656),我已经拆分成瓷砖。 有一个矩形arrays,位图被绘制到,它检测左上angular的矩形是什么,所以它可以绘制位图覆盖用户的可视屏幕。 我的问题是这一切都滞后,当应用程序必须加载到内存的位图; 一旦他们加载它不是一个问题。 我以512块512块开始,然后128块128块。虽然有帮助,但还是有一些明显的滞后。 我一直在研究surfaceView,并希望你的意见,如果我应坚持查看,或使用surfaceView解决我的滞后。

setVideoSurfaceTexture失败:-22在mediaplayer

我尝试使用MediaPlayer(Android ICS)循环播放多个video,并在每次调用oncompletion()时更改video。 它工作的很好,但随机时间后应用程序冻结,我得到的错误: [SurfaceView]连接:已连接(cur = 3,req = 3)setVideoSurfaceTexture失败:-22 发生这种错误时,在内部调用重置播放器 ref:mediaplayer.cpp if (err != OK) { LOGE("setVideoSurfaceTexture failed: %d", err); // Note that we must do the reset before disconnecting from the ANW. // Otherwise queue/dequeue calls could be made on the disconnected // ANW, which may result in errors. reset(); disconnectNativeWindow(); return err; } 根据我的代码,我得到onprepared()的通知并开始播放。 […]

如何协调相机预览尺寸和图片尺寸之间的纵横比差异

我有一个相机应用程序,根据我的布局特点(主要是宽高比)select预览尺寸,然后根据其他约束(最小尺寸)select图片尺寸。 这通常导致与预览不同的纵横比的图片。 这本身并不是问题,但是我需要将预览中的矩形映射到图片上的等效矩形,以便可以提取拍摄照片时预览中可见的最终照片的相同区域。 我知道有不同的纵横比意味着将有部分矩形不重叠,但我没有足够接近边缘,这应该是一个问题。 如果无法直接了解预览和照片地图,有没有办法确定它们如何映射到本地相机? 如果我能够以编程方式检测本机相机长宽比,我可能能够确定裁剪scheme。

如何在Android上正确使用setZOrderMediaOverlay?

像许多其他人一样,我正在试图在相机预览(使用SurfaceView)上绘制3D对象(使用GLSurfaceView)以及放置在顶部的一些button。 我实际上有一个原型工作,但我不能让onResume正常工作。 简历后,GLSurfaceView留在后面,不再可见。 我知道它正在工作,因为如果我从布局中删除SurfaceView,我可以看到图纸很好。 目标是Nexus One,运行库存2.3.3 ROM。 这是布局xml: <com.example.cameratest.GLPreview android:id="@+id/cubes" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <com.example.cameratest.Preview android:id="@+id/camera" android:layout_width="fill_parent" android:layout_height="fill_parent"/> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/buttongroup" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_gravity="right" android:gravity="center"> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonClose"></Button> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonMode"></Button> <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:id="@+id/buttonCameraInfo"></Button> </LinearLayout> 所有这些被封装在一个<merge>块中,但由于某种原因,我不能将它包含在上面的<code>列表中。 Preview是扩展SurfaceView并实现相机预览逻辑的类。 这项活动启动时正常工作。 在我启动另一个活动(例如,通过按下其中一个button)并完成该活动后,主要活动恢复,但3D对象不再可见。 我发现这个讨论提到setZOrderMediaOverlay()将有助于解决这个z顺序问题。 另外, 用于setZOrderMediaOverlay()的Android文档说这个函数应该在“表面视图的包含窗口被附加到窗口pipe理器之前”被调用。 我不知道应该如何解释这个语句,所以我把代码中的debugging语句看成事件的顺序。 以下是GLSurfaceView代码的外观: public class GLPreview extends GLSurfaceView { […]

如何在Android中实现双击表面视图

请告诉如何使用手势检测器在Android中实现双击SurfaceView 。 任何人都可以提供代码示例?