La idea que intento realizar es imprimir un diapasón de guitarra y encima unos cuadrados para señalar algunas notas. Bueno, una imagen vale más que mil palabras, así que esto es ejecutándose en Android 2.3.3

"¡¿Por qué necesitas nuestra ayuda ?!" Porque intenté ejecutarlo en Android 4.0.3 y este otro fue el resultado. Me di cuenta (dejando solo un cuadrado) que los cuadrados intentaban ser lo más grandes posible, así que agregué punto [contador] .setScaleType (ScaleType.CENTER) para cada punto y obtuve esto (http: //i.imgur. com / 4yOJD.png Lo siento, no puedo publicar otro hipervínculo), mientras que 2.3.3 permaneció igual que la primera captura. Esto me hace incapaz de hacer setPadding () para cada punto universalmente, ya que es diferente en las dos versiones. Tengo que comentar que es COMPLETAMENTE el mismo código, solo que se ejecuta en diferentes AVD (también probé dispositivos físicos con el mismo resultado).

También intenté cambiar la gravedad del diseño en código y en xml, pero no obtuve ningún efecto.

Estoy copiando lo que creo que es relevante para la situación, pero no dude en pedir cualquier otra cosa.

Este es mi diseño simple:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="top"
android:orientation="vertical" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:text="@string/add"
    android:textAppearance="?android:attr/textAppearanceLarge" />


<FrameLayout
    android:id="@+id/layoutFrets"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true" >

    <ImageView
        android:id="@+id/imageView1"
        android:scaleType="fitXY"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/fretboard" />

</FrameLayout>

Y aquí está el código de la actividad que genera e imprime los puntos:

Para crear ImageViews:

for (int i = 0; i<notesN; i++)
        dot[i] = new ImageView(this);

Y para imprimirlos tuve que hacer esto, ya que necesito el tamaño del diseño para imprimir los puntos bien

fl.post(new Runnable(){
        public void run() {
            int counter = 0;

            //Pointless constants go here to print the dots in their place              

            for (int strings = 0; strings < fretboard.NSTRINGS; strings++){
                for (int frets = 0; frets < fretboard.NFRETS; frets++){

                    if (fretboard.isOccupied(strings, frets)){
                        dot[counter].setScaleType(ScaleType.CENTER);
                        dot[counter].setImageResource(R.drawable.dot);  

                        //Quite a messy code... calculates the positions based
                        //on the constants above
                        dot[counter].setPadding(
                                (int) (-fl.getWidth() + 2 * fl.getWidth()
                                        * fretDistance[frets]),
                                (int) (fl.getHeight() * (stringDistance[strings])),
                                0, 0);

                        fl.addView(dot[counter]);
                        counter++;
                    }
                }
            }

        }

    });

Eso abordaría la última captura que te di.

También intenté iniciar ImageViews fuera del método post (), con el mismo resultado.

¿Alguna idea de qué estoy haciendo mal? Muchas gracias por adelantado :)

0
poloBBQ 17 mar. 2012 a las 23:40

1 respuesta

La mejor respuesta

Me desperté con la idea de cambiar el tipo de diseño ... y funcionó.

Se cambió FrameLayout por un diseño relativo y todo funcionó como se esperaba.

Todavía estaré atento a este hilo en caso de que alguien pueda dar una explicación de por qué sucedió eso.

0
poloBBQ 18 mar. 2012 a las 13:39