Clickable ImageView Местоположение изменения с анимацией - Android

StackOverflow https://stackoverflow.com/questions/3604802

Вопрос

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

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

Вот мой 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>

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

Это было полезно?

Решение

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

Другие советы

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

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));
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top