这是我第一次使用它,所以我不确定它是我代码中的错误还是我正在尝试做一些不允许的事情。目前,我有一个DrawThread()在运行方法中执行此操作。try{c=m_surfaceHolder.lockCanvas(null);synchronized(m_surfaceHolder){m_view.onDraw(c);}}finally{if(c!=null){m_surfaceHolder.unlockCanvasAndPost(c);}}在这个绘图线程(非UI线程)中,我的onDraw()方法将Canvas传递给另一个名为drawScoreboard()的方法。我希望此方法在显示记分
我正在开发一款安卓游戏,我正在使用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
我知道关于这个话题有很多问题,但是,我对所提供的答案仍然不完全满意。情况:我使用SurfaceHolder在另一个线程中通过绘图实现了SurfaceView,就像开发人员指南中建议的那样:http://developer.android.com/guide/topics/graphics/2d-graphics.html问题:有时我得到java.lang.IllegalStateException:Surfacehasalreadybeenreleased:调用SurfaceHolder.lockCanvas()时或调用SufraceHolder.unlockCanvasAndPost
我在市场上有一款Android游戏,在尝试使用Canvas时收到NullPointers的崩溃报告。我可以假设这是因为SurfaceHolder.lockCanvas()正在返回null,但是它在游戏过程中这样做是因为根据它崩溃的位置,SurfaceHolder.lockCanvas()返回了一个有效的Canvas至少一次。这很难调试,因为我无法在自己的设备上重新创建它,这让我想知道它是否与特定设备有关。我得到的唯一提示是它发生的其中一台设备是Nexus7。注意:这与我提出的同名问题不同。另一个问题是由于在Canvas可用之前尝试使用Canvas,而在这里它可用。下面是我的代码示例:p
我正在制作游戏,由于我是Android的新手,所以我的设计基于示例LunarLandercode.在其设计中,GameThread.doStart()从GameActivity调用,然后该线程从其GameThread.run()循环运行所有内容,如下所示如下所示(为清楚起见,已删除大部分代码):publicclassGameActivityextendsActivity{publicvoidonCreate(BundlesavedInstanceState){gameView=newGameView(this);fl=newFrameLayout(this);fl.addView(ga
我想问一个已经在这里解决过一两次的问题,但是我找到的信息都不能帮助我解决几天前遇到的问题。我想使用Canvas为Android制作动态壁纸-它在图形上不够复杂,不需要OpenGL。为简单起见,假设它由纯色背景和两个较小的矩形组成。绘图由三个独立的阶段组成(在单线程中):backgroundDraw()请求整个Canvas锁定并在其上绘制纯色draw1()请求部分(Rectr1)锁定并仅在锁定的矩形上绘制draw2()请求部分(Rectr2)锁定并仅在锁定的矩形上绘制我在多个Android版本(包括模拟器和设备)上对其进行了测试:2.1、2.2、2.3.3。它似乎只在后一个上工作正常(这
publicclassMainActivityextendsActivity{ImageViewimage;Activitycontext;Previewpreview;staticCameracamera;ButtonexitButton;ImageViewfotoButton;LinearLayoutprogressLayout;Stringpath="/sdcard/KutCamera/cache/images/";publicstaticintcount=0;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){sup
我正在使用AndroidSDK实现一个相当标准的应用程序,其中涉及使用SurfaceView、SurfaceHolder、Callback设置进行绘图。在我的主线程(UI线程)中,我没有绘制或处理SurfaceHolder(或您用它检索的Canvas)。在一个单独的线程中,我有以下内容:Log.i("GAME.DrawThread","run()");Log.i("GAME.DrawThread",Thread.currentThread().getName());Canvascanvas=null;try{canvas=holder.lockCanvas();synchronized
我有一个具有以下View结构的游戏应用程序。首先,我有一个空的FrameLayout,如下所示:FrameLayoutgame_frame_layout=newFrameLayout(getApplicationContext());然后我像这样向它添加两个View:game_frame_layout.addView(customView);game_frame_layout.addView(butView);customView用于显示各种移动的游戏图形,而butView在移动图形的顶部显示一些ImageButton。customView是扩展SurfaceView的CustomVi
我有2个独立的Android应用程序(apk)。应用程序1在其中创建了SurfaceView,并且应该为其他应用程序提供AIDL方法以获取此类SurfaceView的SurfaceHolder实例。因此其他应用程序将能够在该View上进行绘制,该View显示在1号应用程序内。我能够通过aidl轻松传输Surface本身,因为它实现了Parcelable接口(interface)。//IMainService.aidlpackagecom.commonsware.cwac.preso.demo.service;importandroid.view.Surface;interfaceIMa