изменяемое местоположение просмотра изображения с помощью анимации - android - PullRequest
2 голосов
/ 31 августа 2010

У меня есть изображение, которое включено в 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>

Редактировать: я должен добавить, что я использую анимацию.setFillAfter (true) для удержания панели на месте после завершения анимации.

Ответы [ 2 ]

2 голосов
/ 31 августа 2010

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

0 голосов
/ 18 февраля 2013

У меня была та же проблема, и лучшее решение, которое я нашел, - это добавить 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));
}
...