2014-01-18 2 views
3

У меня есть ImageButton с TranslateX Анимация Право на левое, как Merquee, поэтому оно анимируется справа налево. Теперь, когда я нажимаю, ничего не произошло. Фактически клик не выполняется и нажимается только на действительная позиция из imagebutton.Как использовать анимационный вид или объект в Android?

что делать? очень appriciate ... Спасибо

+0

Вы имеете в виду, что imageButton перемещается мгновенно, а не движение? –

+0

его движение как шатер! я хочу нажать на это. – Hardik

+0

Немного вашего кода будет высоко оценен. –

ответ

1

Использование ObjectAnimator (для более поздней версии, то Honeycomb) для Animatinfg ваших объектов, вы можете использовать follwing код для ссылок:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.relativeLayout1); 
    Display display = getWindowManager().getDefaultDisplay(); 
    int width = display.getWidth(); 
    ObjectAnimator mover = ObjectAnimator.ofFloat(layout, "translationX", 
      width, -width); 
    mover.setDuration(10000); 
    mover.setRepeatMode(Animation.INFINITE); 
    mover.setRepeatCount(Animation.INFINITE); 
    mover.start(); 

Если вы используете Апи ниже значения Honeycomb (Как Gingerbread), а затем использовать эту библиотеку: http://nineoldandroids.com/

Это будет Рабочая Как его Работа в моих устройствах.

0

Я сталкивался с аналогичными проблемами, прежде чем разрабатывать приложение для Android. И я обнаружил, что когда анимация запущена, на самом деле создается слой изображения. Поэтому вам нужно щелкнуть по исходной позиции кнопки, что означает, что вам может потребоваться щелкнуть по черному пространству, если кнопка начала двигаться.

1

На данный момент Анимации, которые изменяют матрицу вида Измените только координаты, где изображен вид, а не фактическое местоположение Вид в макете. Таким образом, его просто преобразование холста при вызове 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(); 
+0

ОК, что я знал, но я ожидаю, что какая-либо сторонняя библиотека или обходной путь там ..? – Hardik

+0

@ Хардик Как я уже сказал, вам нужно анимировать сам макет. Обновлен с некоторыми примерами. –

Смежные вопросы