<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">最近在做一项编程,需要截取当前视图的图像保存为Bitmap,假设这个View名为view_A,我在onCreate里面执行了如下的代码</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java">protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//......省略初始化代码
view_A.setDrawingCacheEnabled(true);
Bitmap temp=view_A.getDrawingCache();
fun(temp);
}
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
fun是对Bitmap进行处理的函数,但是一直报空指针错误,Debug发现是因为temp=null
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">然后我又把上述代码放在onResume()中执行,一样是空指针错误;</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">我就意识到可能是因为onCreate和onResume执行的时候,View其实是没完全显示出来的,接下来我使用了一个onClick之后才调用上述代码,</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">得到的Bitmap是有值的。</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">
</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">查找了一些资料,发现了在Activity的@override函数当中,有一个叫做onWindowfocuschanged(),它是指Activity获得焦点或失去焦点的时候调用的函数,</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">当我把上述代码写在</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java">@Override
public void onWindowFocusChanged(boolean hasFocus) {
// TODO Auto-generated method stub
super.onWindowFocusChanged(hasFocus);
View.setDrawingCacheEnabled(true);
Bitmap temp=<span style="font-family: Arial, Helvetica, sans-serif;">view_A</span>.getDrawingCache();
}
temp是有值的。
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">换言之可以推测,视图完全可见的情况下应该是在</span><span style="font-family: Arial, Helvetica, sans-serif;">onWindowFocusChanged,那为何不是onResume呢?这个具体的机理等待有空再去研究。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">现在我们知道的就是,当一些需要Activity一开始能跟用户交互就开始自动执行、加载设计到View、布局的操作,可以放在</span><span style="font-family: Arial, Helvetica, sans-serif;">onWindowFocusChanged当中。</span><span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="java">
<span style="font-family: Arial, Helvetica, sans-serif;">onWindowFocusChanged</span>
onWindowFocusChanged
<span style="font-family: Arial, Helvetica, sans-serif;">onWindowFocusChanged</span>