2012-07-30 6 views
6

kindda ...La zone cliquable sensible ne change pas après l'animation et vue interactive dans une situation bizarre Android

J'ai un ImageView qui a une interaction de clic associé.

Dans le code, je modifie la position de l'ImageView via une animation.

Mais lorsque l'animation se termine la zone cliquable est toujours à l'endroit d'origine du ImageView (je peux réellement exploiter cette zone et voir le clic en cours de traitement).

A fait des recherches, semble que l'animation ne déplace que les pixels de la vue, la vue reste là où il était à l'origine.

Comme un peu d'une critique à l'androïde - ce n'est pas une conception intuitive/mise en œuvre. Ceci n'est pas conforme à "Ce que vous voyez est ce que vous obtenez" critères.

Et ma question est

est-il un moyen (sauf entre deux ImageViews basculer différentes) pour faire bouger cliquable zone où les pixels d'affichage sont?

Mes structures de mise en page et d'animation XML sont les suivantes.

mise en page:

<?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> 

Animation:

<?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> 

Ici la mise en page est aligné au bas de l'écran et doit être facilement basculée - caché ou montré. "bar_handle" ImageView gère le basculement. "bar_handle" est à l'intérieur de la structure animée, donc il se déplace avec lui.

Merci pour toute aide.

Répondre

2

La vue d'animation ne change pas la position effectivement de la vue, donc si vous voulez vraiment changer la position, essayez d'utiliser vous-même défiler

par exemple: utilisation scrollTo, scrollBy ou si vous voulez il défile automatiquement, vous pouvez utiliser scroller pour vous aider à le faire.

+1

Merci @Changwei Yao. C'est probablement la seule façon d'y parvenir sans maintenir des vues multiples, mais le défilement d'un élément va encore déplacer la vue telle que le résultat d'animation doit être annulée. Cela semble un peu trop technique. –

Questions connexes