gpt4 book ai didi

java - 在 Android 中绘制到 SurfaceView

转载 作者:行者123 更新时间:2023-11-29 03:55:26 25 4
gpt4 key购买 nike

我正在尝试在 SurfaceView 中做一些非常简单的绘图,但我无法让它工作。没有异常(exception),但我也没有看到任何结果。

更准确地说,我正在尝试创建一个 SurfaceView 并用一种颜色填充它。

这是我的代码:

public class SvetlinSurfaceViewTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SurfaceRenderer renderer = new SurfaceRenderer(this);
setContentView(renderer);
}
}

class SurfaceRenderer extends ViewGroup implements SurfaceHolder.Callback {
private final String TAG = "Svetlin Surface Renderer";

SurfaceView mSurfaceView;
SurfaceHolder mHolder;

public SurfaceRenderer(Context context) {
super(context);

mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);

// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
}

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {}

@Override
public void surfaceCreated(SurfaceHolder holder) {
tryDrawing(holder);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
tryDrawing(holder);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {}

private void tryDrawing(SurfaceHolder holder) {
Log.i(TAG, "Trying to draw...");

Canvas canvas = holder.lockCanvas();
if (canvas == null) {
Log.e(TAG, "Cannot draw onto the canvas as it's null");
} else {
drawMyStuff(canvas);
holder.unlockCanvasAndPost(canvas);
}
}

private void drawMyStuff(final Canvas canvas) {
Log.i(TAG, "Drawing...");
canvas.drawRGB(255, 128, 128);
}
}

正如预期的那样,我得到了 Drawing... 输出两次。

谁能告诉我为什么我可能无法在 SurfaceView 上绘制?

最佳答案

我删除了代理类 SurfaceRenderer 并将其全部移动到我的 Activity 中。它现在正在工作。固定代码如下:

public class SvetlinSurfaceViewTestActivity
extends Activity
implements SurfaceHolder.Callback {

private static final String TAG = "Svetlin SurfaceView";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

SurfaceView view = new SurfaceView(this);
setContentView(view);
view.getHolder().addCallback(this);
}

@Override
public void surfaceCreated(SurfaceHolder holder) {
tryDrawing(holder);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int frmt, int w, int h) {
tryDrawing(holder);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {}

private void tryDrawing(SurfaceHolder holder) {
Log.i(TAG, "Trying to draw...");

Canvas canvas = holder.lockCanvas();
if (canvas == null) {
Log.e(TAG, "Cannot draw onto the canvas as it's null");
} else {
drawMyStuff(canvas);
holder.unlockCanvasAndPost(canvas);
}
}

private void drawMyStuff(final Canvas canvas) {
Random random = new Random();
Log.i(TAG, "Drawing...");
canvas.drawRGB(255, 128, 128);
}
}

关于java - 在 Android 中绘制到 SurfaceView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6690898/

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