2009-11-06 5 views
5

Я пытаюсь поменять положение двух кнопок. Мой подкачка код выглядит это:Анимированное положение смены двух кнопок

private void exchangeButtons(Button btn1, Button btn2) { 
    // Create the animation set 
    AnimationSet exchangeAnimation = new AnimationSet(true); 
    TranslateAnimation translate = new TranslateAnimation(
     Animation.RELATIVE_TO_SELF, btn2.getLeft(), 
     Animation.RELATIVE_TO_SELF, btn1.getLeft(), 
     Animation.RELATIVE_TO_SELF, btn2.getRight(), 
     Animation.RELATIVE_TO_SELF, btn1.getRight()); 
    translate.setDuration(500); 
    exchangeAnimation.addAnimation(translate); 
    //int fromX = btn1.getLeft(); 
    //int fromY = btn1.getRight(); 
    //int toX = btn2.getLeft(); 
    //int toY = btn2.getRight(); 
    Log.d("ArrangeMe", 
     "view1 pos:" + btn1.getLeft() + ", 
     " +btn1.getRight() + "view2 pos:" + 
     btn2.getLeft() + ", " + btn2.getRight()); 
    AnimationSet exchangeAnimation1 = new AnimationSet(true); 
    TranslateAnimation translate1 = new TranslateAnimation( 
     Animation.RELATIVE_TO_SELF, btn1.getLeft(), 
     Animation.RELATIVE_TO_SELF, btn2.getLeft(), 
     Animation.RELATIVE_TO_SELF, btn1.getRight(), 
     Animation.RELATIVE_TO_SELF, btn2.getRight()); 
    translate1.setDuration(500); 
    exchangeAnimation1.addAnimation(translate1); 
    // EXECUTE btn1.startAnimation(exchangeAnimation); 
    btn2.startAnimation(exchangeAnimation1); 
} 

Я называю код, как показано ниже:

exchangeButtons(button1, button2); 

Мой макет выглядит, как показано ниже:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:orientation="horizontal"> 

    <Button 
     android:text="One" 
     android:id="@+id/button1" 
     android:layout_height="70px" 
     android:layout_width="70px" 
     android:layout_weight="1"> 
    </Button> 
    <Button 
     android:text="Two" 
     android:id="@+id/button2" 
     android:layout_height="70px" 
     android:layout_width="70px" 
     android:layout_weight="1"> 
    </Button> 
</LinearLayout> 

Что происходит, когда я исполню этот код:

Вместо того, чтобы менять свои позиции, они просто исчезают на некоторое время [ может составлять 500 мс] и снова появляться, поскольку они были изначально.

Как решить эту проблему? Будет ли он работать правильно в устройстве?

+0

ли вы решить эти проблемы? –

ответ

1

Android TranslateAnimation не изменяет структуру ваших компонентов, он просто оживляет переход, который вы хотите сделать - после этого вам придется изменить параметры макета вашего компонента (посмотрите на это post).

P.S. Вы можете напрямую использовать анимацию перевода без использования целого нового набора анимации. Еще одна хорошая вещь - создать анимацию, когда ваш макет завышен, и переопределить onSizeChanged(int, int, int, int), чтобы воссоздать их с помощью новых измерений.

Какую структуру вы используете?

3

Вы не получите значение getRight в onCreate, потому что пользовательский интерфейс не был нарисован на экране, поэтому ни один из элементов пользовательского интерфейса пока не измеряется. Попробуйте

ViewTreeObserver vto = btn1.getViewTreeObserver(); 
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout() { 
     btn1.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
     int left = btn1.getLeft(); 
    } 
}); 

Поместите код в OnCreate метод

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