我正在研究2D教程,并能够在三星Galaxy选项卡上测试我当前的教程部分. 教程只需在屏幕上随机移动默认图标即可.用水龙头我创建一个新的移动图标.只要我在屏幕上有25个元素或更少的元素,一切都可以在银河系上效果很好. . 在第26个元素的情况下,帧速率下降到25fps. 当我将图像的尺寸/维度更改为更大的图像时,我在第26个元素之前达到25fps.没关系.但是在某些并不是真正可再现的元素数量,框架从(大多数超过)10fps下降到1fps. 在我的Nexus上,我可以添加150个元素,但仍有50fps. 我所做的:我将位图变量更改为静态变量,因此并非每个元素都有自己的图像,但都使用了相同的图像.这消除了行为,但我怀疑这种解决方案是一个很好的解决方案. 25的神奇数字表明我只能以这种方式使用25个不同的图像. 有人知道什么会导致这种行为?这是三星修改的Android版本中的错误吗? 我的示例eclipse项目可用.如果某些三星所有者会检查他们的样本
以下是关于 surfaceview 的编程技术问答
通过有以下代码,我有一些问题. public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView( new View(this) { Paint mPaint = new Paint(); @Override protected void onDraw(Canvas canvas) { // TODO Auto-generated method stub super.onDraw(canvas); int width = this.getWidth();
我的应用程序之一的片段之一在表面视图中绘制了一个地图,并带有针对按钮和文本的覆盖层. 其他大多数片段都是列表.我的问题是,在地图和另一个片段之间的过渡期间,丑陋的黑色矩形暂时出现在地图视图中,放置文本和按钮视图.尽管确实在两个方向上都发生了,但在回到地图的过渡中似乎更为明显.我使用的是滑行左/滑动的动画,该动画在所有其他方面都可以很好地工作.我尝试了其他动画,没有动画.在过渡之前设置文本和按钮也无济于事,因为视图仍在覆盖层中. 如果有人有任何想法,如何实现干净的碎片过渡,将不胜感激.我正在使用支持片段管理器. 这是我的代码(比我下面显示的文本和按钮要多得多): 布局XML文件:
当我想在SurfaceView上显示普通视图对象时,我遇到了问题. 问题是: 如果我将正常视图的可见性设置为在布局XML文件中不可见的,则视图的刷新不正确 - 视图重叠区域和表面视图无法更新. 如果我将正常视图的可见性设置为在布局XML中可见,那没有问题. 这是我的测试代码: package com.test; import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.SurfaceHolder;
我已经启动了一个包含相机表面视图(用于在屏幕上实时图像预览的项目),我认为实施此功能并不是太多问题,但是现在我已经卡住了在有关预览方向及其比例的部分中,我一直在搜索Stack关于SurfaceView方向和拉伸问题的主题,但我根本无法获得很好的结果. 我想做的是以相同的角度获得预览,无论手机旋转如何,所以用户可以一直看到他的脸. 示例图片 如果您能建议我如何更改代码,以避免在描绘和景观视图中伸展的预览. 我正在列出我的代码 public class CameraView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder mHolder; private Camera mCamera; public CameraView (Context context, Camera camera){ super(context); mCamer
我只需要一些有关相机预览的东西 在Android开发人员文档中,他们在setPreviewSize()的描述下都有此内容: 假设相机支持480x320和320x480预览尺寸.该应用程序需要3:2的预览率.如果显示方向设置为0或180,则预览尺寸应设置为480x320.如果显示方向设置为90或270,则应将预览尺寸设置为320x480.在设置图片尺寸和缩略图大小时也应考虑显示方向. 因此,在我的代码中,我能够旋转相机方向直接直接,这可以正常工作.因此,改变我的方向90度使我的相机直截了当. 现在我想要一个4:3的图像,我受支持的预览尺寸之一是1440x1080,根据上面的块引用,这意味着我需要将预览尺寸更改为: p.setPreviewSize(1080,1440); ,但显然这不是我设备的支持分辨率,因此该应用将崩溃. 这是我支持的预览尺寸,如果我没有支持的预览,该怎么办 iterator D/CAMERA: width: 1920 heigh
我有一个仅使用肖像模式的相机应用程序(通过Android清单文件限制).以下代码是我用于摄像机 的SurfaceView public class CameraPreview extends SurfaceView implements SensorEventListener, SurfaceHolder.Callback { private SurfaceHolder mSurfaceHolder; private Camera mCamera; private Activity mActivity; private static boolean DEBUGGING = true; private static final String LOG_TAG = "CameraPreviewSample"; private static final String CAMERA_PARAM_ORIENTATION = "orientatio
我想根据Android中的设备方向设置摄像头方向,但似乎没有任何作用.我试图旋转表面以及摄像机参数,但肖像模式下的相机预览总是倒置.我需要顺时针旋转90度才能正确.这是我现在正在使用的代码,仅在景观模式下工作. SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() { @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); camera.release(); camera = null; } @Override public void surfaceCreated(SurfaceHolder holder) { initCamera();
我正在尝试在相机预览中应用实时效果,我该怎么做? (就像 cameral2 ) " https://lh4.ggpht.com/2rvnmzocuy9nudrcpkxgx9mt0tgmops_f1fdcagpodzlopxyttf7hkqfbbtbtgbtgbtgngjeqoi = h310-rw" 如果左侧不涉及卷轴,我知道两种在相机preivew上显示实时效果的方法. 使用 glsurfaceview 和 使用 但是,我不知道如何使用实时效果项目覆盖GLES组成. 我是否应该选择glsurfaceview(for performance)或textureView(for flexble)实现scrollview ?哪一个是更好的解决方案,为什么? 是否可以在多个视图中共享一个EGL上下文/表面?,如果是的,则可以参考任何代码片段? 谷歌搜索和阅读不错的 Graphics Architecture 文章和 grafika 项目,我仍然不知道... 也许我想念
我目前正在使用Android上的GL ES 2.0渲染相机预览到SurfaceTexture,并使用OpenGl渲染它,然后将其转移到媒体编解码器的输入表面以进行录制.它在表面视图中显示给用户,并通过设置Surface View的纵横比根据屏幕尺寸而变形. 录制是在肖像中,但是在某个时候,传入的质地将开始以风景为单位,这时我想缩小并将其显示为"电影"宽阔的"电影",以适合屏幕的边缘在顶部和底部用黑色条保持良好状态,以保持纹理的纵横比. private final float[] mTriangleVerticesData = { // X, Y, Z, U, V -1.f, -1.f, 0, 0.f, 0.f, 1.f, -1.f, 0, 1.f, 0.f, -1.f, 1.f, 0, 0.f, 1.f, 1.f, 1.f, 0, 1.f, 1.f, }; public static final String VERTEX_SHADER = "uniform mat4 uMV
我有一个应用程序,该应用程序正在使用 gpuimage的Android端口几个过滤器. 当前没有视频实现,因此我试图从 Google grafika存储库与GPUIMAGE架构一起工作. 基本GPUIMAGE类管理Glcontext和Glsurfaceview,而GPUimagerenderer类实现了渲染器类. 这是我试图从Grafika的RecordFboactivity调整RenderThread的类.有一些问题. first ,在 prepargl()方法中,我通过a surfaceTexture 而不是 surface ,如 gpuimage 根本不使用 Surfaceholder (我认为我可以实现它,但是我想不要太多地更改基本代码,因为我想推开将我的实施备份到上述回购).我知道 WindowsUrface.java 有一种超载的方法,可以从A surfaceTexture 以及表面构造A WindowsUrface ,但是如果我这样做 msurfac
简单地说,我要做的就是在Android中显示一个实时视频帧(每个帧都是YUV420格式).我有一个回调函数,可以将单个框架作为字节数组接收.看起来像这样的东西: public void onFrameReceived(byte[] frame, int height, int width, int format) { // display this frame to surfaceview/textureview. } 可行但慢的选择是将字节数组转换为位图并在SurfaceView上绘制.将来,理想情况下,我希望能够改变此框架的亮度,对比度等,因此我希望我可以使用OpenGl-es.我有效地做什么选择? 请记住,与Camera或MediaPlayer类的实现不同,我无法使用camera.setPreviewTexture(surfaceTexture);将输出引导到SurfaceView/textureView,因为我使用c. 中使用GSTREAMER接收单个帧
在Android上,有没有办法在不创建SurfaceView的情况下获取GPU信息?我不想使用OpenGL绘制任何内容,但是我只需要获取诸如供应商,OpenGL ES版本,可用扩展名等的硬件信息等. 解决方案 我很抱歉,我不确定如何使用Android做到这一点,但是功能GLGETSTRING允许您访问OpenGL信息.这是一个示例C ++样式代码,它将输出您的硬件支持的扩展,我希望您能够适应Android: void PrettyPrintExtensions(){ std::string extensions = (const char*) glGetString(GL_EXTENSIONS); char* extensionStart = &extensions[0]; char** extension = &extensionStart; std::cout
谁能告诉我SurfaceView和GlSurfaceView之间有什么基本区别?我什么时候应该使用SurfaceView,什么时候应该使用GlSurfaceView? 我阅读了一些已经回答过有关堆栈溢出问题的问题,但它们不满足我的疑问. 任何帮助将不胜感激. 解决方案 a GLSurfaceView是SurfaceView,您可以使用OpenGL渲染.它们之间的选择很简单: 如果您熟悉OpenGL并且需要它提供的内容,请使用GLSurfaceView. 否则,使用SurfaceView. OpenGL是低级的.如果您还不熟悉它,那是一项学习的事业.如果您只需要2D图纸,SurfaceView使用高级,相当高的性能画布.使用非常容易. 除非您有强大的理由使用GLSurfaceView,否则应使用常规SurfaceView.我建议,如果您还不知道您需要GL,那么您可能不需要. 其他解决方案 GlsurFaceView是3D应用程序的主要构建块,
我们一直在解决与SurfaceView有关的一些问题,已经超过一周了,没有找到适当的解决方案.我们在论坛上阅读了有关类似问题(甚至Mixare源代码)的其他问题,但找不到答案,因此我们希望您能以某种方式帮助我们. 方案: 我们有 相机的表面视图 露天层的表面视图,该层位于相机的顶部. 另一种视图,它显示了有关我们在屏幕上看到的信息的一些信息.这是两个表面视图的顶部. 问题: 无论我们多么努力,这两个表面视图显然都无法彼此相处.如果我们尝试: setContentView(mCameraPreview); addContentView(mGLSurfaceView, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); addContentView(mInfoView, new LayoutParams(LayoutParams.WRAP_CONTENT, La
我在这里和Android是新手:) 我有一个Android应用程序,它正在接收相机并尝试处理它们(使用OpenCV找到特定颜色).我使用surfaceTexture setPreviewCallbackWithBuffer(),然后使用画布显示它们. 但是,在处理了一些帧之后,我的相机冻结了,我收到了:SurfaceTexture被抛弃了! 请注意,在显示此框架之前,正在处理一些帧,每次都取决于多少? 我的问题是:这是由缓冲区,内存泄漏还是其他原因引起的? 任何帮助都将被重组! 这是我的logcat: 05-22 15:06:12.665: I/Sample::SurfaceView(9765): openCamera 05-22 15:06:12.665: I/Sample::SurfaceView(9765): releaseCamera 05-22 15:06:12.907: I/Choreographer(9765): Skipped 47 frames! The
本质上,我正在使用一个使用SurfaceView创建圆圈的应用程序.每当按"创建"按钮,我希望在SurfaceView内部生成一个新圆圈.每个新圆圈将具有随机的速度,颜色,启动位置以及唯一的序列编号.很容易创建一个带有随机颜色和启动位置的圆圈,但是只有在单击创建按钮时才能让圆圈绘制时遇到一些困难.每当我尝试在创建按钮侦听器中创建一个圆圈时,它就会崩溃.对此的任何帮助将不胜感激.谢谢. package com.dwolford.project8; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.os.Bundle; import an
我在表面持有人的表面处理方法时对相机对象有问题. 我从我的活动中创建一个对象摄像机,这可以很好地显示预览显示,但是当我的活动暂停时,SurfaceView被破坏了,我必须释放相机对象,然后如果我的活动来到resume android在我的相机对象中给我一个nullpoInterException. 我不确定为什么会发生这种情况,我对每种方法进行了评论,看看发生了什么,显然只有在表面处理的方法中,相机对象变为null. 这是我的班级: public class CameraRecord implements SurfaceHolder.Callback{ public static final int BACK_CAMERA = 1; public static final int FRONT_CAMERA = 2; //private SurfaceView surface; private SurfaceHolder holder; private Camera