gpt4 book ai didi

java - Drawable不会在SurfaceView上绘制,Thread实现,不重写onDraw

转载 作者:行者123 更新时间:2023-12-01 15:05:53 26 4
gpt4 key购买 nike

老实说,我很困惑为什么这不起作用。尝试使用布局中的 SurfaceView 和绘制线程将简单的 PNG 绘制到屏幕上,而不是重写 onDraw 函数。它本质上与 LunarLander 示例项目完全相同(我几乎沮丧地撕毁了整个代码集)。

我已经通过日志对其进行了测试,并且我知道 Sprite 正在被“绘制”到 Canvas 上,但窗口中没有显示任何内容。

这是代码,希望它不要太长(删除了不重要的部分):

activity_pannenkoekenhuis.xml(布局/)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<com.example.pannenkoekenhuis.MainView
android:id="@+id/pannenkoekenhuis_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Pannenkoekenhuis" >
</RelativeLayout>

</FrameLayout>

主视图(SurfaceView):

public class MainView extends SurfaceView implements SurfaceHolder.Callback {

class MainThread extends Thread {
SurfaceHolder surfaceHolder;
Context context;
Handler handler;

HandleResources hResources;
HandleGame hGame;

public MainThread(SurfaceHolder surfaceHolder, Context context,
Handler handler) {
this.surfaceHolder = surfaceHolder;
this.context = context;
this.handler = handler;
hResources = new HandleResources(context);
hGame = new HandleGame();

init();
}

@Override
public void run() {
while (true) {
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
Drawable d = context.getResources().getDrawable(R.drawable.s_char);
d.draw(canvas);
}
} finally {
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
}

MainThread thread;

public MainView(Context context, AttributeSet attrs) {
super(context, attrs);

SurfaceHolder surfaceHolder = getHolder();
getHolder().addCallback(this);

thread = new MainThread(surfaceHolder, context, new Handler());

setFocusable(true);
}
}

提前致谢。

最佳答案

呵呵,明白了。由于某种原因需要删除 setBackgroundColor(),因为它可能在图形上绘制。愚蠢的错误。

关于java - Drawable不会在SurfaceView上绘制,Thread实现,不重写onDraw,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12965286/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com