2013-02-19 59 views
0

我想创建一个位图从我以编程方式创建的相对布局。 的Realtivelayout正显示出如预期,但是当我尝试创建一个位图,它返回非法参数异常的高度和宽度必须> 0 我这是怎么做使用相对布局返回一个位图返回illegalargumentexception

Bitmap.createBitmap(saveLayout.getWidth(), 
      saveLayout.getHeight(), Bitmap.Config.ARGB_8888); 

任何指针?

编辑:添加此代码,也:

ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); 
    if (viewTreeObserver.isAlive()) { 
     viewTreeObserver 
       .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         saveLayout.getViewTreeObserver() 
           .removeGlobalOnLayoutListener(this); 
         viewWidth = saveLayout.getWidth(); 
         viewHeight = saveLayout.getHeight(); 

        } 
       }); 
    } 

在上面给出的代码onGlobalLayout()也似乎从来没有被调用。

回答

1

如果您以编程方式创建saveLayout,您可能会询问其宽度和高度太早。 (只是一个受过教育的猜测,因为我看不到你的代码的其余部分)

See this explanation

The reason why that createBitmap() call throws that exception is:

如果宽度或高度是< = 0

所以,尽量推迟创建Bitmap直到之后出现视图,或者查找另一种计算宽度/高度的方法。

This question has a few options/answers for how to defer this calculation to avoid 0 results

+0

嘿,感谢您的帮助 我现在想使用此代码来获取宽度和高度 ViewTreeObserver viewTreeObserver = saveLayout.getViewTreeObserver(); \t \t如果(viewTreeObserver.isAlive()){ \t \t \t viewTreeObserver \t \t \t \t \t .addOnGlobalLayoutListener(新OnGlobalLayoutListener(){ \t \t \t \t \t \t @覆盖 \t \t \t \t \t \t公共无效onGlobalLayout (){ \t \t \t \t \t \t \t saveLayout.getViewTreeObserver() \t \t \t \t \t \t \t \t \t .removeGlobalOnLayoutListener(本); \t \t \t \t \t \t \t viewWidth = saveLayout.getWidth(); \t \t \t \t \t \t \t viewHeight = saveLayout。的getHeight(); \t \t \t \t \t \t} \t \t \t \t \t}); 但是在全局布局上似乎没有被调用,你能说出原因吗? – 2013-02-19 02:03:20

+0

请在上面的**问题**中发布其他代码(使用下方的**编辑**链接),并将其格式化为代码。阅读您刚才发布的内容真的很难。谢谢。 – Nate 2013-02-19 02:05:14

+0

问题编辑:) – 2013-02-19 02:08:47