Добрый день, сегодня напишем автоматическое скрытие адресной строки при прокрутке, по типу хрома.
Схема называется быстрым возвратом и используется для экономии вертикального пространства.
Если интересно, добро пожаловать под кат Для начала у нас будет RelativeLayout для активности, WebView для нее и RelativeLayout для скрытой панели.
В коде MainActivity: настроить переменные<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android " xmlns:tools="http://schemas.android.com/tools " android:layout_width="match_parent " android:layout_height="match_parent " android:background="#0099cc " android:id="@+id/rl " tools:context="ru.terra.jbrss.MainActivity "> <WebView android:id="@+id/wvMain " android:layout_width="match_parent " android:layout_height="match_parent " android:layout_alignParentBottom="true"/ > <RelativeLayout android:id="@+id/actionBar " android:layout_width="match_parent " android:layout_height="50dp "> <TextView android:id="@+id/tvUrl " android:layout_width="wrap_content " android:layout_height="wrap_content " android:layout_centerInParent="true " android:text="url here"/> </RelativeLayout> </RelativeLayout>
private WebView webView;
private View actionBar;
private int baseHeight;
private int webViewOnTouchHeight;
private int barHeight;
private float heightChange;
private float startEventY;
private View layout;
private TextView tvUrl;
создайте свой собственный сенсорный прослушиватель
private View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
startEventY = event.getY();
heightChange = 0;
webViewOnTouchHeight = webView.getLayoutParams().
height;
break;
case MotionEvent.ACTION_MOVE:
float delta = (event.getY() + heightChange) - startEventY;
boolean heigthChanged = resizeView(delta);
if (heigthChanged) {
actionBar.setTranslationY(baseHeight - webView.getLayoutParams().
height - barHeight);
}
}
return false;
}
};
прописываем поиск всех этих элементов в методе onCreate, добавляем наш прослушиватель касаний для веб-просмотра и вычисляем высоты
actionBar = findViewById(R.id.actionBar);
layout = findViewById(R.id.rl);
tvUrl = (TextView) findViewById(R.id.tvUrl);
webView = (WebView) findViewById(R.id.wvMain);
webView.setOnTouchListener(listener);
webView.post(new Runnable() {
@Override
public void run() {
barHeight = actionBar.getMeasuredHeight();
baseHeight = layout.getMeasuredHeight();
webView.getLayoutParams().
height = webView.getMeasuredHeight() - barHeight;
webView.requestLayout();
}
});
а теперь самый важный код, который будет изменять размер веб-просмотра и макет адресной строки.
private boolean resizeView(float delta) {
heightChange = delta;
int newHeight = (int) (webViewOnTouchHeight - delta);
if (newHeight > baseHeight) { // scroll over top
if (webView.getLayoutParams().
height < baseHeight) { webView.getLayoutParams().
height = baseHeight; webView.requestLayout(); return true; } } else if (newHeight < baseHeight - barHeight) { // scroll below bar if (webView.getLayoutParams().
height > baseHeight - barHeight) { webView.getLayoutParams().
height = baseHeight - barHeight; webView.requestLayout(); return true; } } else { // scroll between top and bar webView.getLayoutParams().
height = (int) (webViewOnTouchHeight - delta);
webView.requestLayout();
return true;
}
return false;
}
скриншоты на примере моей RSS-ридера
перед прокруткой
после прокрутки
Теги: #Android #быстрый возврат #разработка Android
-
Использование Карты «Тройка» Как Полиса Омс
19 Oct, 24 -
Письма И Рисунки
19 Oct, 24 -
Моделирование Мира И Динамические Системы
19 Oct, 24