2010-08-30 4 views
2

У меня есть изображение, которое включено в RelativeLayout. Когда щелкнул изображение, я аниматирую весь RelativeLayout с помощью трансляционной анимации, чтобы переместить его вниз.изменение местоположения кликабельного изображения с анимацией - андроид

Когда я снова нажимаю на изображение (в новом месте), он должен переместить его обратно, но это не так. Однако, если я нажму, где началось изображение, он переместит всю «панель» обратно. Почему изображение не движется с релятивизацией ... по крайней мере, поскольку его кликабельность. Фактическое изображение перемещается, но место, где его можно щелкнуть, - нет.

вот мой XML для макета:

<RelativeLayout 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_width="fill_parent" 
    android:layout_height="120px"  
    android:layout_marginTop="-106px" 
    android:id="@+id/chatbox" 
    android:visibility="invisible"> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="106px" 
     android:background="#000000" 
     android:id="@+id/chattext" /> 
    <ImageView 
     android:layout_width="20px" 
     android:layout_height="14px" 
     android:id="@+id/chatbubble" 
     android:layout_below="@id/chattext" 
     android:src="@drawable/chatbubble" /> 
</RelativeLayout> 

Edit: Я хотел бы добавить, что я использую Animation.setFillAfter (истинный), чтобы удерживать панель на месте после того, как анимация завершается.

ответ

2

Это потому, что анимация фактически не влияет на позиции взглядов, они просто рисуют их. Поэтому для обработки щелчка на новом месте вам нужно что-то там разместить (т. Е. Невидимый FrameLayout). Или вы можете изменить поля просмотров на анимацию, так что взгляды на самом деле переместятся на место.

+0

Это то, чего я боялся. Спасибо за информацию. – Kyle

0

У меня была такая же проблема, и самое лучшее решение, которое я нашел, чтобы добавить AnimationListener к анимации и переместите взгляд самостоятельно в этом слушателю, как Константин Буров сказал:

animation.setFillAfter(false); 

AnimationListener animListener = new AnimationListener() { 

    @Override 
    public void onAnimationStart(Animation animation) { 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     RelativeLayout.LayoutParams relativeLayoutParams = (LayoutParams) yourView.getLayoutParams(); 

     //To avoid the flicker 
     yourView.clearAnimation(); 

     relativeLayoutParams.setMargins(0, 0, 0, Utils.dpToPx(activity, newPositionDp); 
     yourView.setLayoutParams(relativeLayoutParams); 
    } 
}; 

animation.setAnimationListener(animListener); 

Utils.dpToPx может быть полезным тоже:

public final static int dpToPx(Context context, int dp) { 
    return ((int)((dp * context.getResources().getDisplayMetrics().density) + 0.5)); 
} 
Смежные вопросы