2012-07-30 13 views
6

Kindda situación extraña ...El área de clic sensible no cambia después de la animación y la vista interactiva en Android

Tengo una ImageView que tiene un clic de interacción asociado a él.

En el código cambio la posición de ImageView mediante una animación.

Pero cuando finaliza la animación, el área en la que se puede hacer clic sigue en el lugar original de ImageView (realmente puedo tocar esa área y ver el clic que se está manejando).

Hice algunas investigaciones, parece que la animación solo mueve los píxeles de la vista, la vista permanece donde estaba originalmente.

Como un poco de crítica para Android, este no es un diseño/implementación intuitiva. Esto no concuerda con "Lo que ves es lo que obtienes" criterios.

Y mi pregunta es

¿Hay alguna manera (excepto alternar entre dos ImageViews diferentes) para hacer el movimiento área seleccionable a donde la vista píxeles son?

Mi diseño y animación Las estructuras xml son las siguientes.

diseño:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/keywords_layer" 
    android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:layout_margin="0dp" 
android:padding="0dp" 
android:orientation="vertical" 
android:visibility="gone" 
> 
<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="35dp" 
    > 
    <ImageView 
     android:layout_width="fill_parent" 
     android:layout_height="35dp" 
     android:layout_centerInParent="true" 
     android:adjustViewBounds="false" 
     android:scaleType="fitXY" 
     android:src="@drawable/keyword_bar_handle" 
    /> 
    <ImageView 
     android:id="@+id/bar_handle" 
     android:layout_width="45dp" 
     android:layout_height="fill_parent" 
     android:layout_alignParentRight="true" 
     android:adjustViewBounds="false" 
     android:scaleType="fitXY" 
    /> 
</RelativeLayout> 
<HorizontalScrollView 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/browser_address_bar_1_5_height" 
    android:layout_margin="0dp" 
    android:padding="0dp" 
    android:background="@drawable/keyword_bar_bg" 
    android:scrollbars="none" 
    > 
    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/browser_address_bar_1_5_height" 
     android:layout_margin="0dp" 
     android:padding="0dp" 
    /> 
</HorizontalScrollView> 

Animación:

<?xml version="1.0" encoding="utf-8"?> 
    <set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:fillEnabled="true" 
    android:fillAfter="true"> 
<translate 
    android:fromYDelta="60" 
    android:toYDelta="0" 
    android:duration="300" 
/> 
    </set> 

En aquí la disposición se alinea a la parte inferior de la pantalla y necesita ser suavemente toggled - oculta o muestra. "bar_handle" ImageView maneja el alternar. "bar_handle" está dentro de la estructura animada, por lo que se mueve con ella.

Gracias por cualquier ayuda.

Respuesta

2

El Ver animación no cambian la realidad posición de la vista, por lo que si desea cambiar realmente la posición, trate de usar desplazarse por sí mismo

por ejemplo: uso scrollTo, scrollBy o si desea se desplaza automáticamente, puede usar la rueda de desplazamiento para ayudarlo a hacer eso.

+1

Gracias @Changwei Yao. Esa es probablemente la única forma de lograrlo sin mantener múltiples vistas, pero desplazar un elemento moverá aún más la vista, de modo que el resultado de la animación debe deshacerse. Parece un poco excesivo de ingeniería. –

Cuestiones relacionadas