2015-12-17 36 views
5

Ciao Ho provato a scrivere una funzione che cattura uno screenshot. Ho trovato un codice che lo fa perfettamente con un clicklistner, ma quando rimuovo il pulsante clicklistner e provo a fare uno screenshot nel oncreate, la bitmap che ottengo è vuota. Perché succede?Android prendendo un'immagine screenshot

disposizione:

<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" 

    /> 

attività:

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

    } 


} 
+0

puoi provare a scrivere il codice in 'onPostCreate()' –

risposta

3

solo cercare di prendere uno screenshot in onCreate bitmap che ottengo è vuota. Perché succede?

L'interfaccia utente non è stata ancora visualizzata. Dato l'approccio che stai utilizzando, è necessario che il framework abbia effettivamente disegnato l'interfaccia utente prima di poter catturare uno screenshot.

Se, invece, si ha la radice Viewdraw() ad un Bitmap emessi a fronte di Canvas, che potrebbe lavoro già in onCreate(). Dipende se la radice View è stata chiamata con measure() e layout() e non sono sicuro se ciò accade già in onCreate() o in un secondo momento.

+0

Ok grazie mille –

0

puoi provarlo. classe pubblica MainActivity estende l'attività { LinearLayout L1; Immagine ImageView;

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



}