在使用Delphi 12为Android开发应用时,遇到SurfaceView仅显示黑色背景而无法正常绘制图形的问题。通过分析代码,问题的根源在于paint
对象的样式设置不正确。将paint.setStyle(TJPaint_Style.JavaClass.FILL_AND_STROKE);
修改为paint.setStyle(TJPaint_Style.JavaClass.FILL);
可以解决此问题。
以下是调整后的关键部分代码:
constructor TMySurfaceView_callback.Create;
begin
inherited Create;
// 初始化SurfaceView及其他成员变量
paint := TJPaint.JavaClass.init;
paint.setColor($FF0000);
paint.setStrokeWidth(57);
// 修改这里,将STROKE移除,仅保留FILL
paint.setStyle(TJPaint_Style.JavaClass.FILL); // 原先是FILL_AND_STROKE
paint.setTextSize(50);
paint.setTextAlign(TJpaint_align.JavaClass.CENTER);
end;
procedure TMySurfaceView_callback.draw;
var
Canvas: JCanvas;
begin
// 绘图逻辑
Canvas := FSurfaceHolder.lockCanvas(nil);
try
Canvas.drawColor($FA8072, TJPorterDuff_Mode.JavaClass.CLEAR);
Canvas.drawCircle(100, 100, 100, paint);
Canvas.drawCircle(200, 200, 20, paint);
Canvas.drawText(StringToJString('canvas text:--' + IntToStr(count)), 500, 300, paint);
Canvas.drawPath(mPath, Paint);
finally
FSurfaceHolder.unlockCanvasAndPost(Canvas);
end;
end;
注意事项:
- 在
draw
方法中,确保每次调用lockCanvas
时都传递了nil
作为参数,以保证画布能够正确锁定和解锁。 - 确保所有绘图操作都在
lockCanvas
和unlockCanvasAndPost
之间完成,这样可以避免出现只显示黑色背景的情况。 - 如果需要处理触摸事件来动态更新绘图内容,请确保在相应的事件处理器(如
onTouch
)中正确调用了绘图方法。
通过上述调整,应该能够解决SurfaceView在Delphi 12中仅显示黑色背景的问题,并能正常显示绘制的内容
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END