java - para - manual de programacion android pdf
Android 4.4.2 crea una máscara negra fuera del límite del objeto de visualización, solo durante las animaciones de código Java completas (1)
! SOLUCIONADO
Por alguna razón, las animaciones API19 API programáticamente puras no funcionan muy bien con configuraciones absolutas, como setX () o setY (). Los expertos pueden echarle un vistazo a esto. API19 prefiere trabajar con los márgenes en el lado del parámetro de diseño.
El siguiente procedimiento, aplicar a Android 4.4.2. De fuente, funciona en las otras versiones hacia abajo y hacia arriba, pero debe cambiar su forma de pensar. Debe colocar una imagen mediante programación utilizando parámetros de diseño, por lo tanto, cambie:
iv.setX(50);
iv.setY(0);
a
lparam.setMargins(50, 0, 0, 0);
iv.setLayoutParams(lparam);
iv.requestLayout();
también puedes usar (para API> = 17)
lparam.setMarginStart(50); // for x pos
lparam.setMarginEnd(0); // for y pos
Debe llamar a "requestLayout ()" para asegurarse de que los nuevos cambios en el diseño se realizarán al agregar la vista al elemento primario (fl).
Finalmente, por error, uso "LayoutParams" en lugar de "FrameLayout.LayoutParams". Esto no tiene nada que ver con el problema y no lo estaba afectando, pero es la forma correcta de definirlo para que cambie:
LayoutParams lparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
a
FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
El código de trabajo completo para cualquier API es:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Common common = new Common(this, this);
FrameLayout fl = new FrameLayout(this);
ImageView iv = new ImageView(this);
FrameLayout.LayoutParams flparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);
FrameLayout.LayoutParams lparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
iv.setImageBitmap(common.newImage("100x100.png", ImageFormat.RGB565).getBitmap());
lparam.setMarginStart(50);
lparam.setMarginEnd(0);
iv.setLayoutParams(lparam);
iv.requestLayout();
fl.addView(iv);
this.setContentView(fl, flparam);
AlphaAnimation animation = new AlphaAnimation(0, 1);
animation.setDuration(3000);
iv.setAnimation(animation);
iv.startAnimation(animation);
}
Realmente necesito ayuda con esto ...
Por favor, eche un vistazo a esta animación simple FadeIn de un ImageView, usando el código completo de Java. Recrearlo usando API''s 21, 18, 17, 16 .. funciona perfecto. Ahora pruébalo con API 19 (android 4.4.2), máscara divertida creada (ver la explicación a continuación):
public class _ExampleAnimationNotWorking extends Activity {
Common common; // my own class to read assets
FrameLayout fl;
ImageView iv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.common = new Common(this,this);
this.fl = new FrameLayout(this);
this.iv = new ImageView(this);
FrameLayout.LayoutParams flparam = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.MATCH_PARENT);
LayoutParams lparam = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
iv.setImageBitmap(common.newImage("iv_image.png", ImageFormat.RGB565).getBitmap());
iv.setX(50);
iv.setY(0);
fl.addView(iv, lparam);
this.setContentView(fl, flparam);
AlphaAnimation animation = new AlphaAnimation(0,1);
animation.setDuration(3000);
iv.setAnimation(animation); // may skip frames if not used in API19 (thats another problem)
iv.startAnimation(animation);
} ....
Durante la animación, Android 4.4.2 (API19) está creando una máscara negra fuera del límite de tamaño de ImageView, comenzando en coordenadas x / y (0 + imageWidth / 0 + imageHeight), por lo que si coloca inicialmente la imagen fuera de esa coordenada, no No veo ninguna animación, solo la imagen original al final de la animación. Para recrear el problema, he colocado la imagen en x = 50. Vería que el lado derecho de la mitad de la imagen es negro durante la animación de Android 4.4.2. Puede volver a crear usando emulador con cualquier tamaño de configuración de pantalla que prefiera.
Cambiar "lparam" de WRAP_CONTENT a MATCH_PARENT u otro ancho / alto no es la solución. Debería hacerlo de la misma manera que en otras versiones (Nota, lo intento también en 4.4.3 y 4.4.4 y funciona perfecto). Esto puede ser un error en la animación de código 4.4.2 java, porque si usas el método XML, funciona perfectamente en API19. Necesito una solución o trabajo en esto, porque todo mi proyecto está basado en código Java puro, y no puedo excluir KitKat 4.4.2 como un objetivo en el proyecto.
Gracias.
PD:> Algunas personas están aquí para qué ?. Estaba bien para corregir mi publicación, pero llevándome -2 puntos por eso? no es una solución para mi problema, y más si necesito algunos puntos para adjuntar las imágenes relacionadas con este problema. Gracias CBredlow!
EDITADO: Necesito subir las imágenes que explican este problema, pero como SO no es tan amigable para los nuevos usuarios, simplemente siga este enlace para ver las imágenes:
http://forum.xda-developers.com/showpost.php?p=56553476&postcount=2