Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android taking a screenshot image

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);
            }
        });

    }


}
like image 510
Zach Bublil Avatar asked Oct 19 '22 20:10

Zach Bublil


1 Answers

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.

like image 56
CommonsWare Avatar answered Oct 29 '22 19:10

CommonsWare