2012-02-20 4 views
0

Je travaille sur une application dans laquelle j'ai besoin d'enregistrer des données de table sous forme d'image lorsque l'utilisateur clique sur un bouton. Pour ce faire, je le code suivant:Android comment réinitialiser canvas/bitmap pour capturer une nouvelle image

//save is the button to click 
this.save.setOnClickListener(new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     AlertDialog.Builder alert=new AlertDialog.Builder(MyActivity.this); 
     alert.setTitle("Save"); 
     alert.setMessage("Enter a file name");   
     final EditText input=new EditText(MyActivity.this); 
     alert.setView(input);   
     alert.setPositiveButton("OK", new DialogInterface.OnClickListener(){ 
      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
       table.setDrawingCacheEnabled(true); 
       Bitmap b=table.getDrawingCache(); 
       Bitmap combo=Bitmap.createBitmap(b.getWidth(), b.getHeight(), Bitmap.Config.ARGB_8888); 
       Canvas canvas=new Canvas(combo); 
       canvas.drawBitmap(b, 0f, 175f, null);    
       OutputStream outStream = null; 
       String value=input.getText().toString(); 
       File directory =new File(extStorageDirectory+"/Files/"); 
       if(!directory.mkdir()) 
        directory.mkdir(); 
       File file = new File(directory, value); 
       try { 
        outStream = new FileOutputStream(file); 
        combo.compress(Bitmap.CompressFormat.PNG, 100, outStream); 
        FileOutputStream fOut=openFileOutput("public.dat", Context.MODE_PRIVATE|Context.MODE_APPEND); 
        OutputStreamWriter osw=new OutputStreamWriter(fOut); 
           osw.write(value+"\n");       
        osw.flush(); 
        osw.close(); 
        fOut.flush(); 
        fOut.close(); 
        outStream.flush(); 
        outStream.close();            
       } catch (FileNotFoundException e) {      
        e.printStackTrace();      
       } catch (IOException e) {      
        e.printStackTrace();      
       } 
      }    
     }); 

Cette fonction permet d'enregistrer une image sans problème mais quand je change ma table et essayer de sauver une autre image il enregistre le premier. Je pense que je dois remettre la toile ou quelque chose comme ça alors j'ai essayé, après l'enregistrement du fichier:

canvas.restore(); 

Mais cela ne fonctionne pas. Mais quand je relance l'application sur le simulateur, je peux enregistrer une nouvelle image. Quelqu'un peut-il m'aider s'il vous plaît à résoudre ce problème.

+0

De quel type d'objet s'agit-il? Vous ne spécifiez pas car cela fait partie de votre solution. – IcedDante

+0

@IcedDante c'est une disposition linéaire avec des éléments Tablerow. – Anila

Répondre

0

J'ai trouvé la solution à mon problème. Je devais juste ajouter

table.destroyDrawingCache(); 

juste avant d'attraper des exceptions.

Questions connexes