2011-10-21 2 views
3

Je souhaite afficher un bitmap et enregistrer le bitmap. Mais j'ai besoin de faire tout cela hors écran.Rendu Afficher en mode Bitmap hors écran dans Android

J'ai essayé ceci:

LayoutInflater inflater = getLayoutInflater(); 
    View linearview = (View) findViewById(R.id.linearview); 
    linearview = inflater.inflate(R.layout.intro, null); 


Bitmap bm = Bitmap.createBitmap(linearview.getMeasuredWidth(), linearview.getMeasuredHeight(), Bitmap.Config.ARGB_8888);     
Canvas c = new Canvas(bm); 
linearview.layout(0, 0, linearview.getLayoutParams().width, linearview.getLayoutParams().height); 
linearview.draw(c); 

    String extStorageDirectory = Environment.getExternalStorageState().toString(); 
    extStorageDirectory = Environment.getExternalStorageDirectory().toString(); 
    OutputStream outStream = null; 
    File file = new File(extStorageDirectory, "screen1.PNG"); 

    try { 
     outStream = new FileOutputStream(file); 
     bm.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
     outStream.flush(); 
     outStream.close(); 


    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

EDIT: Mon accident d'application, car la doesnt vue ont une largeur ou la hauteur. (la mesure est une tentative pour résoudre ce problème)

Et srry pour le mauvais anglais.

+1

en demandant au sujet d'un accident, vous devriez toujours poster votre trace – jqpubliq

+0

Est-ce que dans un service –

+0

comment puis-je définir une mise en page à un service? –

Répondre

1

Le problème est ici:

linearview = inflater.inflate(R.layout.intro, null); 

Vous devez passer une mise en page de parent, il peut donc être mesuré correctement. Je comprends que vous ne voulez pas que la vue soit attachée à la mise en page, mais vous pouvez utiliser une mise en page parente juste pour la mesure en utilisant cette autre version de la méthode, en passant false à attachToRoot.

public View inflate (int resource, ViewGroup root, boolean attachToRoot) 

De la documentation officielle des paramenters:

racine: vue en option pour être le parent de la hiérarchie générée (si attachToRoot est vrai), ou bien simplement un objet qui fournit un ensemble de valeurs LayoutParams pour la racine de la hiérarchie retournée (si attachToRoot est faux.)

attachToRoot: Que la hiérarchie gonflée doit être attachée au paramètre racine? Si la valeur est false, la racine n'est utilisée que pour créer la sous-classe correcte de LayoutParams pour la vue racine dans le fichier XML.

En cas de doute, vous pouvez toujours passer le contenu de l'application comme la mise en page de parent:

findViewById(android.R.id.content);