Desarrollo de Android: los botones reaccionan lentamente

La pregunta es sobre el desarrollo de Android, más exactamente se trata de botones y vistas cumstom. Estoy usando cuatro botones en Linear Layouts y una vista personalizada en la que dibujo imágenes. Cuando uso el método para hacer esto (sobrescribo onDraw ()) todo funciona muy bien, excepto que mis botones reaccionan bastante lento al presionarlos. Sólo la eliminación de las funciones de onDraw les deja trabajar rápidamente. Por lo tanto, mis preguntas son: ¿Por qué esos botones funcionan tan lento? Simplemente no puedo encontrar por qué! ¿Tengo que usar los botones auto creados en la vista personalizada?

¿Y cómo resolver esto?

Thsi es la clase que utilizo el método onDraw:

import android.content.Context; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.ImageView; public class test extends ImageView{ Context mContext; String[] medium; final int pspawn[]={64,32}; public test(Context context, AttributeSet attrs) { super(context, attrs); mContext = context; } private String getMapInfo(Integer counter){ String[] mapArray = TextUtils.split(map, " "); return mapArray[counter]; } public void onDraw(Canvas canvas){ int x = 0; int y = 0; for(int i = 0; i<100; i = i+1) { String mapinfo = getMapInfo(i); if (mapinfo.equals("x")) { canvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.t1), x, y, null); } x = x + 32; if (x == 320) { y = y + 32; x = 0; } canvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(),R.drawable.t3), pspawn[0], pspawn[1],null); invalidate(); } } } 

Y esta es mi clase principal:

 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class desimain extends Activity{ private Thread worker; private Runnable newMsg; private OnClickListener getKeystroke; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); getKeystroke = new OnClickListener(){ public void onClick(View view) { switch(view.getId()){ case R.id.Up: worker = new Thread(newMsg); worker.start(); break; case R.id.Down: Toast.makeText(getApplicationContext(), "Down", Toast.LENGTH_SHORT).show(); break; case R.id.Left: Toast.makeText(getApplicationContext(), "Left", Toast.LENGTH_SHORT).show(); break; case R.id.Right: Toast.makeText(getApplicationContext(), "Right", Toast.LENGTH_SHORT).show(); break; } }; }; Button pressUp = (Button) findViewById (R.id.Up); pressUp.setOnClickListener(getKeystroke); Button pressDown = (Button) findViewById (R.id.Down); pressDown.setOnClickListener(getKeystroke); Button pressLeft = (Button) findViewById (R.id.Left); pressLeft.setOnClickListener(getKeystroke); Button pressRight = (Button) findViewById (R.id.Right); pressRight.setOnClickListener(getKeystroke); newMsg = new Runnable(){ public void run() { runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), "Up", Toast.LENGTH_SHORT).show(); } }); } }; } } 

PS: Sé que este código no es muy bonito, pero por el momento sólo trato de averiguar los conceptos básicos que necesito …

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.