На данный момент Анимации, которые изменяют матрицу вида Измените только координаты, где изображен вид, а не фактическое местоположение Вид в макете. Таким образом, его просто преобразование холста при вызове onDraw()
этого представления.
Итак, вы можете setTranslationX(100)
, и просмотр будет нарисован 100 пикселями вправо. Но область щелчка (getHitRect()
) по-прежнему находится на том же месте, которое было назначено для просмотра на макете.
Или вы можете разместить точку зрения, где она должна быть после анимации, и запустить анимацию в обратном порядке.
Если вы хотите на самом деле изменить макет, вам придется изменить этот вид LayoutParams
и изменить его ширину/высоту/маржу. Тогда вам понадобится requestLayout()
на каждом кадре анимации.
Пример: Это будет живой левый край вид внутри FrameLayout:
//---assuming animated view is a child of Framelayout---
FrameLayout parent;
View animatedChild;
ValueAnimator animator = new ValueAnimator();
animator.setFloatValues(0,parent.getWidth()); //--slide out to right--
animator.setDuration(1000);
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
FrameLayout.LayoutParams params = animatedChild.getLayoutParams();
Float margin = (Float) valueAnimator.getAnimatedValue();
params.leftMargin = margin.intValue();
animatedChild.requestLayout();
}
});
animator.start();
Вы имеете в виду, что imageButton перемещается мгновенно, а не движение? –
его движение как шатер! я хочу нажать на это. – Hardik
Немного вашего кода будет высоко оценен. –