2012-06-06 22 views
0

У меня есть ScrollView, который содержит LinearLayout, в LinearLayout У меня есть представление, что я расширяю или сворачиваюсь в зависимости от нажатой кнопки. Эта штука прекрасно работает.Как поместить ScrollView после остановки анимации

Что я хотел бы сделать, это переставить ScrollView так, чтобы при расширении представления он автоматически переместил вид прокрутки так, чтобы расширенный вид был виден. Я бы хотел, чтобы представление автоматически переместило его автоматически, поэтому пользователю не нужно прокручивать.
В настоящее время, когда открывается представление, все данные отбрасываются, и вам нужно прокручивать вверх, чтобы просмотреть недавно расширенный контент. Я попытался изменить положение после окончания анимации, но этот раздел кода никогда не срабатывает. Ниже мой код.

public void animateExpandCollapse(View v) { 

     View captionLayout = null; 
     View parentLayout = null; 

     if(v.getId() == R.id.squareCal) { 
      captionLayout = (LinearLayout) findViewById(R.id.layout3); 
      parentLayout = (LinearLayout) findViewById(R.id.squareLayout); 
     } else if(v.getId() == R.id.circleCal) { 
      captionLayout = (LinearLayout) findViewById(R.id.layout2); 
      parentLayout = (LinearLayout) findViewById(R.id.circleLayout01); 
     } 


     if (!more) { 
      dda = new DropDownAnim(captionLayout, 350, false); 
      more=true; 
     } else { 
      dda = new DropDownAnim(captionLayout, 350, true); 
      more=false; 
     } 
     dda.setDuration(350); 
     parentLayout.startAnimation(dda); 

     // Here, I want to position ScrollView to the bottom 
     // After the animation has finished but this never fires. 
     if(dda.hasEnded()) { 
      ScrollView sv = (ScrollView)findViewById(R.id.calScroller); 
      sv.scrollTo(0, sv.getBottom()); 
     } 

     return; 
    } 

ответ

0

После поиска в Интернете я нашел следующее решение. Я надеюсь, что это помогает кому-то.

dda.setAnimationListener(new AnimationListener() { 
      @Override 
      public void onAnimationStart(Animation animation) { 
      } 
      @Override 
      public void onAnimationRepeat(Animation animation) { 
      } 
      @Override 
      public void onAnimationEnd(Animation animation) { 
       ScrollView sv = (ScrollView)findViewById(R.id.calScroller); 
       sv.scrollTo(0, sv.getBottom()); 
      } 
     }); 
Смежные вопросы