2011-05-19 2 views
0

J'ai le code suivant qui fonctionne parfaitement pour mettre continuellement à jour l'écran avec un bitmap.Android: l'interface utilisateur se verrouille lorsque le menu est frappé

public class render extends Activity 
{ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(new myView(this)); 
    } 
    static { 
     System.loadLibrary("render"); 
    } 
} 
class myView extends View 
{ 
    private int[] mColors; 
    private Bitmap mBitmap; 
    private static native int[] renderBitmap(); 

    public myView(Context context) 
    { 
     super(context); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) 
    { 
     mColors = renderBitmap(); 

     mBitmap = Bitmap.createBitmap(mColors, 64, 64, Bitmap.Config.ARGB_8888);  
     mBitmap = Bitmap.createScaledBitmap(mBitmap, 256, 256, false); 
     canvas.drawBitmap(mBitmap, 8, 8, null); 

     // force a redraw 
     invalidate(); 
    } 
} 

Le problème est que j'ai depuis ajouté un menu d'options. Lorsque j'appuie sur la touche de menu, mon application se bloque, je devine parce que le fil de l'interface utilisateur est bloqué. Quelle est la meilleure façon de gérer cela?

Merci d'avance.

Edit: J'ai essayé d'utiliser AsyncTask sans succès:

public class render extends Activity 
{ 
    public Bitmap mBitmap; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(new myView(this)); 
    } 

    private static native int[] renderBitmap(); 

    static 
    { 
     System.loadLibrary("render"); 
    } 

    private class renderTask extends AsyncTask<Void, Void, Bitmap> 
    {  
     @Override 
     protected Bitmap doInBackground(Void... params) 
     { 
      int[] mColors; 

      mColors = renderBitmap(); 
      mBitmap = Bitmap.createBitmap(mColors, 64, 64, Bitmap.Config.ARGB_8888);  
      mBitmap = Bitmap.createScaledBitmap(mBitmap, 256, 256, false); 

      return mBitmap; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) 
     { 
      mBitmap = result; 
     } 
    } 

    class myView extends View 
    { 
     public myView(Context context) 
     { 
      super(context); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) 
     { 
      new renderTask().execute(); 

      canvas.drawBitmap(mBitmap, 112, 8, null); 

      // force a redraw 
      //invalidate(); 
     } 
    } 
} 
+0

Eh bien, vous devez nous montrer ce que vous faites lorsque vous créez/afficher le menu – Falmarri

Répondre

Questions connexes