Intereting Posts

Слушатель для просмотра виджета ViewFlipper

У меня есть реализация ViewFlipper, которую нужно улучшить. Этот ViewFlipper имеет три дочерних представления. В принципе, мне нужен индикатор, на котором в настоящее время активна дочерняя функция. My ViewFlipper – это лишь часть сложного макета, который также имеет виды списков и т. Д.

Переключение просмотров также выполняется автоматически и выполняется в заданный интервал.

Из SDK SDK-ссылки я не видел ни одного слушателя, когда ViewFlipper меняет дочернее представление.

Вы, ребята, знаете, каким образом у меня может быть слушатель этого мероприятия?

Или есть альтернативные способы реализовать эту функцию, кроме использования ViewFlipper?

Благодаря!

Solutions Collecting From Web of "Слушатель для просмотра виджета ViewFlipper"

Если вы применяете анимацию (вне или в анимации) при переключении просмотра, вы можете установить прослушиватель в анимацию и, например, действовать на конец анимации.

viewFlipper.getInAnimation().setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) {} public void onAnimationRepeat(Animation animation) {} public void onAnimationEnd(Animation animation) {} }); 

Хотя это старый вопрос, я нашел достойный подход, который работает.

 public class MainLaunch extends Activity { ... main setup and code int currentIndex = 0; int maxIndex = 3; // set specific animations for the view flipper on showNext // only showNext while in valid index public void showNext() { if( currentIndex < maxIndex ) { currentIndex++; viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_left); viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_right); viewFlipper.showNext(); } } // set specific animations for the view flipper on showPrevious // only showPrevious while in valid index public void showPrevious() { if( currentIndex > 0 ) { currentIndex--; viewFlipper.setInAnimation(getBaseContext(), R.anim.slide_in_right); viewFlipper.setOutAnimation(getBaseContext(), R.anim.slide_out_left); viewFlipper.showPrevious(); } } // get current flipped view public View getCurrentView() { return viewFlipper.getChildAt(currentIndex); } } 

Затем, чтобы использовать ViewFlipper, вы вызываете showNext () или showPrevious в любом месте и можете получить текущее активное представление, вызвав getCurrentView (). Это помогает в настройке различных анимаций для левого и правого листания и для легкого получения текущих рабочих просмотров.

Я нахожу один способ определить, какой ребенок активирован:

AddOnLayoutChangeListener в ViewFlipper и getCurrentView из ViewFlipper, затем сравните с дочерними элементами ViewFlipper.

Не забудьте удалитьOnLayoutChangeListener, когда действие onDestory

 private View page1, page2, page3, page4; private ViewFlipper viewFlipper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.flipper); page1 = findViewById(R.id.MyFlipper_page01); page2 = findViewById(R.id.MyFlipper_page02); page3 = findViewById(R.id.MyFlipper_page03); page4 = findViewById(R.id.MyFlipper_page04); viewFlipper = (ViewFlipper) findViewById(R.id.MyFlipper_flipper); viewFlipper.addOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); } View.OnLayoutChangeListener onLayoutChangeListener_viewFlipper = new View.OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { if(viewFlipper.getCurrentView() == page1) Log.d("test", "change to flipper_page1"); else if(viewFlipper.getCurrentView() == page2) Log.d("test", "change to flipper_page2"); else if(viewFlipper.getCurrentView() == page3) Log.d("test", "change to flipper_page3"); else if(viewFlipper.getCurrentView() == page4) Log.d("test", "change to flipper_page4"); } }; @Override protected void onDestroy() { super.onDestroy(); viewFlipper.removeOnLayoutChangeListener(onLayoutChangeListener_viewFlipper); } 

Я создал расширенный ViewFlipper, который делает именно это: DecentViewFlipper