TranslateAnimation, примененный к ImageView, оставляет след

Недавно я боролся с инфраструктурой TranslateAnimation, предоставляемой библиотекой пользовательского интерфейса Android.

Я разработал RelativeLayout, в котором GridView занимает более или менее 80% экрана, а ImageView находится внизу экрана. Последний должен постоянно перемещаться по нижней части экрана в случайных направлениях.

Вот макет:

<ImageView
    android:id="@+id/bottom_fish"
    android:layout_alignParentBottom="true"
    android:adjustViewBounds="true"
    android:cropToPadding="true"
    android:scaleType="centerInside"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:layout_marginBottom="40dp"
    android:layout_alignParentLeft="true"
    android:layout_weight="0"
    android:src="@drawable/little_fish_right"
></ImageView>

<GridView 
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_above="@id/mouin_bottom"
    android:columnWidth="90dp"
    android:numColumns="4"
    android:verticalSpacing="10dp"
    android:horizontalSpacing="10dp"
    android:stretchMode="columnWidth"
    android:gravity="center"
/>

And here's the TranslateAnimation:

TranslateAnimation slide = new TranslateAnimation(x0, newX, y0, newY);
slide.setFillAfter(true);
slide.setInterpolator(new LinearInterpolator());
slide.setDuration(duration);   
slide.setAnimationListener(animationListener);
iv.startAnimation(slide);

x0 += newX;
y0 += newY;

AnimationListener, назначенный анимации, просто вызывает этот метод в функции onAnimationEnd.

Дело в том, что при движении изображения справа налево оно в конце концов оставляет на экране растровые следы, которые через некоторое время исчезают.

Любая идея, где проблема может быть размещена?

Спасибо.


person Chinaski    schedule 03.07.2011    source источник
comment
попробуйте указать false в методе setFillAfter(). слайд.setFillAfter (ложь);   -  person Onur A.    schedule 22.06.2013


Ответы (2)


После вызова iv.startAnimation(slide) вам может потребоваться вызвать invalidate() для родителя представления. У меня была такая проблема раньше. Я предполагаю, что вы решили проблему раньше, но, надеюсь, это будет полезно для других.

person Ben Kane    schedule 16.07.2013

Я думаю, что это проблема дизайна макета. Попробуйте дать

android:layout_width="fill_parent" 

вместо

android:layout_width="wrap_content"
person Community    schedule 25.06.2013