我希望在我需要创建一个或绘制它之前,找出我的画布的尺寸。
我知道的唯一的画布代码(或者有一个脆弱的知识)是:
final SurfaceHolder holder = getHolder();
try
{
Canvas canvas = holder.lockCanvas();
if(canvas != null)
{
onDraw(canvas);
holder.unlockCanvasAndPost(canvas);
}
}
catch (Exception e)
{
e.printStackTrace();
}
但这看起来像是为了获得高度而做得太多了。是否有像WhatHeightWillMyCanvasBeWhenIMakeOne()这样的函数?
编辑: ...如果没有这样的功能,那么暂时获取画布足够长时间询问其高度然后获取的最小代码是什么摆脱它(如果需要)。
答案 0 :(得分:1)
在覆盖onDraw并执行一些画布锁定和发布之前,无法获得大小适合可绘制屏幕区域的画布。 (据我所知,无论如何)
@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时,你会发送一个画布。现在只需在自定义视图中实现onDraw方法。
@Override
protected void onDraw(Canvas canvas) {
int h = canvas.getHeight();
int w = canvas.getWidth();
}
这也可以用画布完成。首先要声明一个带有一些静态持有者的类。
public class Window {
public static int WINDOW_HEIGHT; // = to screen size
public static int WINDOW_WIDTH; // = to screen size
}
接下来,在您的主要启动活动中调用一些特殊功能。我们要求这些因为我从未见过有人想画画布而不想要一个没有条形的全屏幕。如果您打算不使用全屏,请忽略这些选项。因此,为了获得准确的度量,我们也需要将它们隐藏在这里。
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;
}
从您的自定义视图中,您可以像这样进行调用
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
}