Reputation: 867
Hi I tried to write a function that takes a screenshot. I found a code that does it perfectly with a button clicklistner,but when I remove the button clicklistner and just try to take a screenshot in the oncreate the bitmap I get is empty. Why does it happens?
layout:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/LinearLayout01"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="munch"
android:id="@+id/munchscreen"
/>
<ImageView
android:layout_width="fill_parent"
android:layout_height="500dp"
android:id="@+id/screenshots"
/>
Activity:
public class MainActivity extends Activity {
LinearLayout L1;
ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
L1 = (LinearLayout) findViewById(R.id.LinearLayout01);
Button but = (Button) findViewById(R.id.munchscreen);
but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View v1 = L1.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
BitmapDrawable bitmapDrawable = new BitmapDrawable(bm);
image = (ImageView) findViewById(R.id.screenshots);
image.setBackgroundDrawable(bitmapDrawable);
}
});
}
}
Upvotes: 5
Views: 361
Reputation: 477
you can try this. public class MainActivity extends Activity { LinearLayout L1; ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
L1 = (LinearLayout) findViewById(R.id.LinearLayout01);
Button but = (Button) findViewById(R.id.munchscreen);
/*but.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
View v1 = L1.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
BitmapDrawable bitmapDrawable = new BitmapDrawable(bm);
image = (ImageView) findViewById(R.id.screenshots);
image.setBackgroundDrawable(bitmapDrawable);
}
});*/
}
@Override
public void onPostCreate()
{
View v1 = L1.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap bm = v1.getDrawingCache();
BitmapDrawable bitmapDrawable = new BitmapDrawable(bm);
image = (ImageView) findViewById(R.id.screenshots);
image.setBackgroundDrawable(bitmapDrawable);
}
}
Upvotes: 0
Reputation: 1007543
just try to take a screenshot in the oncreate the bitmap I get is empty. Why does it happens?
The UI will not have been rendered yet. Given the approach that you are using, you need for the framework to have actually drawn the UI before you can capture a screenshot.
If, instead, you have the root View
draw()
to a Bitmap
-backed Canvas
, that might work already in onCreate()
. It depends on whether the root View
has been called with measure()
and layout()
yet, and I'm not sure whether that happens already in onCreate()
or at a later point.
Upvotes: 3