¿Por qué setImageBitmap no tiene efecto en ImageButton personalizado?

Encontré este acoplamiento que indica cómo podría hacer el efecto del resplandor en mi ImageButton . Así que cada vez que el usuario presiona el ImageButton se llama a la función onTouchEvent() y allí llamo a la función setImageBitmap() . El problema es que esta función ( setImageBitmap() ) parece no tener ningún efecto en absoluto.

Que funciona:

1) Hasta ahora he extendido el ImageButton como a continuación

 // Pen.java public class Pen extends ImageButton { public Pen(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { System.out.println("Now I am setting Pen"); return true; } } 

A continuación, dentro de la actividad Creo Pen (custom ImageButton ) instancia, definir setGlow() y llamar a setImageBitmap() de la instancia de Pen .

//MainActivity.java

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Pen myImgbutton; myImgbutton = (Pen) findViewById(R.id.pen); myImgbutton.setImageBitmap(setGlow(R.drawable.pen)); } } public Bitmap setGlow(int resourceId) { ...... } 

Lo que no funciona:

1) Todo lo mismo que arriba (extendiendo un ImageButton en android), pero esta vez estoy llamando a la función setImageBitmap desde dentro onTouchEvent (). Para este caso tengo definida la función setGlow dentro de Pen.java

 // Pen.java public class Pen extends ImageButton { public Pen(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { System.out.println("Now I am setting Pen"); // Here I say to apply the glow effect to the image setImageBitmap(setGlow(R.drawable.pen)); return true; } public Bitmap setGlow(int resourceId) { .... } } 

Entonces en archivo xml hago:

  ..... <com.example.testsetimagebmp.Pen android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/pen" android:background="@drawable/pen" /> .... 

Finalmente en MainActivity

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } // .... } 

Construí el proyecto a medida que publicas, pero funciona bien. Establece el mapa de bits correctamente. Así que quizás el método getGlow () no funciona bien. Hacer algunos registros como a continuación

 public Bitmap setGlow(int resourceId) { Bitmap bm = BitmapFactory.decodeResource(getResources(),resourceId); Log.e("tag", "Size: " + bm.getByteCount()); return bm; } 

Luego compruebe si la devolución es correcta.

Creo que esto podría ser el clásico tema de la memoria. Puede intentar utilizar el mapa de bits del icono del lanzador si desea comprobar si esto es cierto:

 public class Pen extends ImageButton { public Pen(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onTouchEvent(MotionEvent event) { System.out.println("Now I am setting Pen"); // Here I say to apply the glow effect to the image setImageBitmap(setGlow(R.mipmap.ic_launcher)); return true; } public Bitmap setGlow(int resourceId) { .... } } 

Si este es el problema, compruebe este enlace .

No puedes hacer eso porque perderás memoria si pones setImageBitmap (setGlow (R.drawable.pen)) en onTouchEvent.

OnTouchEvent se activará serval veces por segundo. Y usted creará serval bitmaps en la memoria por segundo. Se quedará sin memoria antes de setImageBitmap con éxito.

  • NullPointerException en getReseources () Bitmap Array
  • decodeStream devuelve null
  • Imagen de alta resolución - OutOfMemoryError
  • ¿Cómo crear Bitmap de la imagen de buffer de bytes en grises?
  • ¿Cómo puedo guardar un mapa de bits con onRetainNonConfigurationInstance () para la orientación de la pantalla?
  • Escala de imagen sin perder calidad de imagen no funcionó
  • Cambiar el tamaño de un mapa de bits a un valor fijo, pero sin cambiar la relación de aspecto
  • Configuración de varios elementos personalizados en MultiAutoCompleteTextView: Android
  • Android - comprimir mapa de bits antes de guardarlo en SDCARD en actividad para obtener resultados
  • Android: gira la imagen en la vista de la imagen por un ángulo
  • Aplicación de una superposición (filtro de imagen) a un mapa de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.