gpt4 book ai didi

android - 不绘图获取 Canvas 高度

转载 作者:行者123 更新时间:2023-11-29 02:07:31 25 4
gpt4 key购买 nike

我希望在需要创建 Canvas 或在其上绘图之前找出我的 Canvas 的尺寸。

我唯一知道(或知之甚少)的 Canvas 代码是这样的:

  final SurfaceHolder holder = getHolder();

try
{
Canvas canvas = holder.lockCanvas();
if(canvas != null)
{
onDraw(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
catch (Exception e)
{
e.printStackTrace();
}

但这看起来只是为了获取高度而做的太多了。有没有像 WhatHeightWillMyCanvasBeWhenIMakeOne() 这样的函数?

编辑: ...如果没有这样的功能,那么什么是临时获取 Canvas 足够长的时间以询问其高度然后摆脱的最小代码它(如果需要)。

最佳答案

在覆盖 onDraw 并进行一些 Canvas 锁定和发布之前,您无法获得适合可绘制屏幕区域大小的 Canvas 。 (据我所知)

@Override
public void run() {

while (running) {
Canvas c = null;

try {
c = view.getHolder().lockCanvas();
synchronized (view.getHolder()) {
view.onDraw(c);
}
} finally {
if (c != null) {
view.getHolder().unlockCanvasAndPost(c);
}
}

try {

sleep(10);
} catch (Exception e) {}
}
}

现在,当您在循环中调用 draw 时,您正在向它发送一个 Canvas 。现在只需在您的自定义 View 中实现 onDraw 方法即可。

@Override
protected void onDraw(Canvas canvas) {
int h = canvas.getHeight();
int w = canvas.getWidth();

}

这也可以在没有 Canvas 的情况下完成。首先声明一个带有一些静态持有者的类。

public class Window {
public static int WINDOW_HEIGHT; // = to screen size
public static int WINDOW_WIDTH; // = to screen size

}

接下来在您的主要启动 Activity 中调用一些特殊功能。我们要求这些是因为我从未见过有人想在 Canvas 上绘画而不想要没有栏的全屏。如果您不打算使用全屏,请忽略这些选项。因此,为了获得准确的测量结果,我们也需要将它们隐藏在这里。

public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // <--- or here you can call your custom view

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Window.WINDOW_HEIGHT = height;
Window.WINDOW_WIDTH = width;
}

在您的自定义 View 中,您可以像这样进行调用

private void CreateWindow(Context context) {
Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();


Window.WINDOW_HEIGHT = height; // = to screen size
Window.WINDOW_WIDTH = width; // = to screen size

}

关于android - 不绘图获取 Canvas 高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9210262/

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