English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Используйте интерфейс OnTouchListener View для мониторинга скольжения listView, сравнивая размер координат с предыдущими, чтобы определить направление скольжения, и затем определить, необходимо ли отображать или скрывать соответствующие макеты, и это будет сделано с анимацией.
1. Автоматическое отображение и скрытие Toolbar
Сначала добавьтеHeaderView к listView, чтобы избежать遮挡 первого элемента Toolbar.
View header = new View(this); header.setLayoutParams(new AbsListView.LayoutParams( AbsListView.LayoutParams.MATCH_PARENT, (int) getResources().getDimension(R.dimen.abc_action_bar_default_height_material))); mListView.addHeaderView(header); // R.dimen.abc_action_bar_default_height_material - высота системыActionBar
Определите переменную mTouchSlop, чтобы получить минимальное расстояние скольжения, которое система считает достаточным
mTouchSlop = ViewConfiguration.get(this).getScaledTouchSlop(); // Минимальное расстояние скольжения, которое система считает достаточным
Условие для события скольжения
bbsListView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: mFirstY = event.getY(); break; case MotionEvent.ACTION_MOVE: mCurrentY = event.getY(); if(mCurrentY - mFirstY > mTouchSlop) direction = 0; //listView downward scrolling else if(mFirstY - mCurrentY > mTouchSlop) direction = 1; //listView upward scrolling if(direction == 1) { if(mShow) { toolbarAnim(1); //Hide the upper view mShow = !mShow; } } else if(direction == 0) { if(!mShow) { toolbarAnim(0); //Show the upper view mShow = !mShow; } } case MotionEvent.ACTION_UP: break; } return false; } }); }
Property animation
protected void toolbarAnim(int flag) { if(set != null && set.isRunning()) { set.cancel(); } if(flag == 0) { mAnimator1 = ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(), 0); mAnimator2 = ObjectAnimator.ofFloat(mToolbar, "alpha", 0f, 1f); } else if(flag == 1) { mAnimator1 = ObjectAnimator.ofFloat(mToolbar, "translationY", linearView.getTranslationY(), -linearView.getHeight()); mAnimator2 = ObjectAnimator.ofFloat(mToolbar, "alpha", 1f, 0f); } set = new AnimatorSet(); set.playTogether(mAnimator1, mAnimator2); set.start(); } //Above is the attribute animation of displacement and opacity
When using, the theme must be NoActionBar to avoid conflicts. At the same time, introduce compilation
dependencies{ compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:21.0.3' }
2. Когда компонент, который нужно скрывать и отображать, не toolbar, а наш пользовательский макет myView, нужно учитывать несколько моментов,
(1) Layout должен использовать относительное расположение, чтобы наш пользовательский макет висел над listView.
(2) Чтобы избежать того, чтобы первый элемент был закрыт myView, добавить HeaderView к listView, в этот момент нужно измерить высоту myView, нужно использовать следующий метод, чтобы передать задачу в поток UI, в противном случае при выполнении会出现 ошибки.
final View header=new View(this); //Добавить headView к listView, чтобы избежать того, чтобы первый элемент был закрыт header.post(new Runnable() { public void run() { header.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, myView.getHeight())); } });
Другие, как и toolbar
Ниже описан метод реализации автоматического отображения и скрытия макета Android ListView, который я хотел бы представить вам. Надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, и я постараюсь ответить вам своевременно. Вновь хочу выразить благодарность всем за поддержку сайта呐喊 tuition!
Заявление: содержимое этой статьи взято из интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями интернета, загружен самостоятельно, сайт не обладает правами собственности, не прошел редактирование, не несет ответственности за связанные с этим юридические вопросы. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @), и предоставьте соответствующие доказательства. Если после проверки подтвердится, что это нарушение, сайт немедленно удалил涉嫌侵权的内容.