2

J'ai un problème pour obtenir le "ScreenShot" correct d'une mise en page dans Android. La mise en page contient EditTexts et TextViews.Mise à jour du DrawingCache d'une mise en page spécifique dans Android

Le code suivant donne seulement un "ScreenShot" de la mise en page, mais quand j'ai changé la chaîne dans EditText ou TextView le "ScreenShot" ne pas mis à jour! Comment puis-je m'assurer que le "ScreenShot" peut être mis à jour et être identique à celui affiché à l'écran?

private Bitmap getBitmap() { 
    Bitmap bitmap = null; 
    LayoutInflater factorys = LayoutInflater.from(this); 
    final View textEntryView = factorys.inflate(R.layout.activity_main, null); 
    View ll = textEntryView.findViewById(R.id.ll_layout); 
    ll.setDrawingCacheEnabled(true); 
    ll.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
      View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
    ll.layout(0, 0, ll.getMeasuredWidth(), ll.getMeasuredHeight()); 
    ll.buildDrawingCache(); 
    bitmap = Bitmap.createBitmap(ll.getDrawingCache()); 
    //bitmap=getCacheBitmapFromView(ll); 
    ll.setDrawingCacheEnabled(false); 
    return bitmap; 
} 

est ici tout le code

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button btn = (Button) findViewById(R.id.button1); 
     btn.setOnClickListener(mycl); 
    } 

    OnClickListener mycl = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      // TODO Auto-generated method stub 
      Bitmap mybpic = null; 
      mybpic = getBitmap(); 
      ImageView imageView = (ImageView) findViewById(R.id.imageView1); 
      imageView.setImageBitmap(mybpic); 
     } 
    }; 

    private Bitmap getBitmap() { 
     Bitmap bitmap = null; 
     LayoutInflater factorys = LayoutInflater.from(this); 
     final View textEntryView = factorys.inflate(R.layout.activity_main, 
       null); 
     View ll = textEntryView.findViewById(R.id.ll_layout); 

     ll.destroyDrawingCache(); 
     ll.invalidate(); 
     ll.setDrawingCacheEnabled(true); 
     ll.measure(View.MeasureSpec.makeMeasureSpec(0, 
       View.MeasureSpec.UNSPECIFIED), View.MeasureSpec 
       .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
     ll.layout(0, 0, ll.getMeasuredWidth(), ll.getMeasuredHeight()); 
     ll.buildDrawingCache(); 

     bitmap = Bitmap.createBitmap(ll.getDrawingCache()); 
     // bitmap=getCacheBitmapFromView(ll); 
     ll.setDrawingCacheEnabled(false); 
     return bitmap; 
    } 
} 
+0

essayez d'ajouter ll.destroyDrawingCache(); avant ll.setDrawingCacheEnabled (true); –

+0

J'ai essayé les deux ll.destroyDrawingCache(); ll.invalidate(); cela ne fonctionne pas pour moi @DivyeshPatel – Lee

+0

essayez d'invalider pour edittext et textview –

Répondre

1

Résolu, je ne devrais pas utiliser

LayoutInflater

LayoutInflater Instancie juste un fichier XML de mise en page dans son Android correspondante. Afficher les objets, mais pas le graphique en cours see here

il suffit d'utiliser findViewById pour obtenir la vue objet puis

view.setDrawingCacheEnabled(true); 
view.buildDrawingCache(true); 
Bitmap drawingCache = view.getDrawingCache(); 

qui fonctionne!