jjzjj

lockCanvas

全部标签

java - 屏幕方向更改时 lockCanvas 失败

我正在尝试在Android中构建动态壁纸,但当方向改变时应用程序崩溃了。尝试将Canvas锁定在表面支架上时看起来它正在崩溃,但我不确定我能做些什么来防止它。这是类:publicclassLiveWallpaperServiceextendsWallpaperService{publicvoidonCreate(){super.onCreate();}publicvoidonDestroy(){super.onDestroy();}publicEngineonCreateEngine(){returnnewMyWallpaperEngine();}classMyWallpaperEng

android - SurfaceHolder.lockCanvas() 对我的游戏应用程序来说花费的时间太长

我正在开发一款安卓游戏,我正在使用SurfaceView。我有一个每16毫秒调用一次的方法(我想要60fps)publicvoidmyDraw(SurfaceHolderholder){Canvasc=null;longstart=System.currentMillis();try{synchronized(holder){c=holder.lockCanvas();if(c!=null){c.drawColor(Color.GREEN);}}}finally{if(c!=null){holder.unlockCanvas(c);}}Log.i(TAG,"totaltime:"+(S

java - SurfaceHolder的lockCanvas和unlockCanvasAndPost的同步

我知道关于这个话题有很多问题,但是,我对所提供的答案仍然不完全满意。情况:我使用SurfaceHolder在另一个线程中通过绘图实现了SurfaceView,就像开发人员指南中建议的那样:http://developer.android.com/guide/topics/graphics/2d-graphics.html问题:有时我得到java.lang.IllegalStateException:Surfacehasalreadybeenreleased:调用SurfaceHolder.lockCanvas()时或调用SufraceHolder.unlockCanvasAndPost

android - SurfaceHolder.lockCanvas() 返回 null,即使它可用

我在市场上有一款Android游戏,在尝试使用Canvas时收到NullPointers的崩溃报告。我可以假设这是因为SurfaceHolder.lockCanvas()正在返回null,但是它在游戏过程中这样做是因为根据它崩溃的位置,SurfaceHolder.lockCanvas()返回了一个有效的Canvas至少一次。这很难调试,因为我无法在自己的设备上重新创建它,这让我想知道它是否与特定设备有关。我得到的唯一提示是它发生的其中一台设备是Nexus7。注意:这与我提出的同名问题不同。另一个问题是由于在Canvas可用之前尝试使用Canvas,而在这里它可用。下面是我的代码示例:p

android - SurfaceHolder.lockCanvas() 返回 null

我正在制作游戏,由于我是Android的新手,所以我的设计基于示例LunarLandercode.在其设计中,GameThread.doStart()从GameActivity调用,然后该线程从其GameThread.run()循环运行所有内容,如下所示如下所示(为清楚起见,已删除大部分代码):publicclassGameActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){gameView=newGameView(this);fl=newFrameLayout(this);fl.addView(ga

android - 带 SurfaceHolder.lockCanvas 的动态壁纸(矩形脏)

我想问一个已经在这里解决过一两次的问题,但是我找到的信息都不能帮助我解决几天前遇到的问题。我想使用Canvas为Android制作动态壁纸-它在图形上不够复杂,不需要OpenGL。为简单起见,假设它由纯色背景和两个较小的矩形组成。绘图由三个独立的阶段组成(在单线程中):backgroundDraw()请求整个Canvas锁定并在其上绘制纯色draw1()请求部分(Rectr1)锁定并仅在锁定的矩形上绘制draw2()请求部分(Rectr2)锁定并仅在锁定的矩形上绘制我在多个Android版本(包括模拟器和设备)上对其进行了测试:2.1、2.2、2.3.3。它似乎只在后一个上工作正常(这

android - lockCanvas是什么意思(详解)

我一直致力于在Android中绘制图形。那里有很多示例应用程序,但我经常看到的一件事是lockCanvas。有人可以更详细地解释一下吗,因为我真的不明白,而且我认为理解它对future的编程很重要?一个例子:try{c=panel_thread.getHolder().lockCanvas(null);synchronized(panel_thread.getHolder()){panel_thread.update();panel_thread.onDraw(c);}}这就是我目前所拥有的。我应该如何解释这个正确?同步是做什么的?为什么将Canvas对象分配给getHolder和lo

java - 安卓 IllegalArgumentException lockCanvas()

我一直在为这个异常而苦苦挣扎,我环顾四周,但没有任何帮助。这是代码packagecom.example.surfacetest;importandroid.app.Activity;importandroid.content.Context;importandroid.graphics.BitmapFactory;importandroid.graphics.Canvas;importandroid.graphics.Color;importandroid.os.Bundle;importandroid.util.Log;importandroid.view.MotionEvent;i

java - lockCanvas() 返回不同的 Canvas

尝试在单个Canvas上每毫秒绘制一些东西。我的意思是只向Canvas添加细节,而不是每一帧都重新绘制。所以这段代码给了我三个不同的Canvas。第三,然后又是第一。为什么?publicvoidrun(){this.run=true;Canvascanvas=null;while(run){try{canvas=this.surfaceHolder.lockCanvas();synchronized(this.surfaceHolder){Thread.sleep(delay);draw(newImg(canvas,size));}}catch(InterruptedException

java - 使用 lockCanvas() 的 Android TextureView 硬件加速

我正在尝试在我的Canvas上使用适用于Android的硬件加速。我曾经有一个SurfaceView,我在上面做了lockCanvas()以获得后来绘制的Canvas,但我改为TextureView因为我无法让SurfaceView使用硬件加速。我目前正试图让这个Canvas使用硬件加速。Canvascanvas=this.lockCanvas();System.out.println(this.isHardwareAccelerated()+","+canvas.isHardwareAccelerated());给我输出:真,假(this是一个TextureView)有谁知道为什么c
12