解决Delphi 12中SurfaceView总是显示黑色背景的问题

欢迎加入全网最大Delphi 技术交流群 682628230

在使用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作为参数,以保证画布能够正确锁定和解锁。
  • 确保所有绘图操作都在lockCanvasunlockCanvasAndPost之间完成,这样可以避免出现只显示黑色背景的情况。
  • 如果需要处理触摸事件来动态更新绘图内容,请确保在相应的事件处理器(如onTouch)中正确调用了绘图方法。

通过上述调整,应该能够解决SurfaceView在Delphi 12中仅显示黑色背景的问题,并能正常显示绘制的内容

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享