setShadowOnScrollableView
This commit is contained in:
parent
a7f2dd44d8
commit
5782c0100d
5 changed files with 51 additions and 46 deletions
|
@ -16,6 +16,7 @@ import android.view.ViewTreeObserver.OnScrollChangedListener;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
import android.widget.ScrollView;
|
||||||
|
|
||||||
import androidx.annotation.ColorInt;
|
import androidx.annotation.ColorInt;
|
||||||
import androidx.annotation.ColorRes;
|
import androidx.annotation.ColorRes;
|
||||||
|
@ -478,4 +479,15 @@ public abstract class MenuBottomSheetDialogFragment extends BottomSheetDialogFra
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setShadowOnScrollableView() {
|
||||||
|
ScrollView scrollView = getView().findViewById(R.id.scroll_view);
|
||||||
|
if (scrollView.canScrollVertically(1) || scrollView.canScrollVertically(-1)) {
|
||||||
|
drawTopShadow(false);
|
||||||
|
scrollView.getChildAt(0).setPadding(0, 8, 0, 0);
|
||||||
|
} else {
|
||||||
|
drawTopShadow(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,7 +1,6 @@
|
||||||
package net.osmand.plus.osmedit.dialogs;
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
import android.content.res.ColorStateList;
|
import android.content.res.ColorStateList;
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -47,10 +46,6 @@ public class BugBottomSheetDialog extends MenuBottomSheetDialogFragment {
|
||||||
private OsmNotesPoint point;
|
private OsmNotesPoint point;
|
||||||
private HandleOsmNoteAsyncTask.HandleBugListener handleBugListener;
|
private HandleOsmNoteAsyncTask.HandleBugListener handleBugListener;
|
||||||
private TextInputEditText noteText;
|
private TextInputEditText noteText;
|
||||||
private int contentHeightPrevious = 0;
|
|
||||||
private int buttonsHeight;
|
|
||||||
private int shadowHeight;
|
|
||||||
private ScrollView scrollView;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createMenuItems(Bundle savedInstanceState) {
|
public void createMenuItems(Bundle savedInstanceState) {
|
||||||
|
@ -63,7 +58,7 @@ public class BugBottomSheetDialog extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
View osmNoteView = View.inflate(UiUtilities.getThemedContext(app, nightMode),
|
View osmNoteView = View.inflate(UiUtilities.getThemedContext(app, nightMode),
|
||||||
R.layout.open_osm_note_text, null);
|
R.layout.open_osm_note_text, null);
|
||||||
osmNoteView.getViewTreeObserver().addOnGlobalLayoutListener(getOnGlobalLayoutListener());
|
osmNoteView.getViewTreeObserver().addOnScrollChangedListener(getOnGlobalLayoutListener());
|
||||||
TextInputLayout textBox = osmNoteView.findViewById(R.id.name_text_box);
|
TextInputLayout textBox = osmNoteView.findViewById(R.id.name_text_box);
|
||||||
textBox.setHint(AndroidUtils.addColon(app, R.string.osn_bug_name));
|
textBox.setHint(AndroidUtils.addColon(app, R.string.osn_bug_name));
|
||||||
ColorStateList colorStateList = ColorStateList.valueOf(ContextCompat
|
ColorStateList colorStateList = ColorStateList.valueOf(ContextCompat
|
||||||
|
@ -80,24 +75,11 @@ public class BugBottomSheetDialog extends MenuBottomSheetDialogFragment {
|
||||||
items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.content_padding_small)));
|
items.add(new DividerSpaceItem(app, app.getResources().getDimensionPixelSize(R.dimen.content_padding_small)));
|
||||||
}
|
}
|
||||||
|
|
||||||
private ViewTreeObserver.OnGlobalLayoutListener getOnGlobalLayoutListener() {
|
private ViewTreeObserver.OnScrollChangedListener getOnGlobalLayoutListener() {
|
||||||
return new ViewTreeObserver.OnGlobalLayoutListener() {
|
return new ViewTreeObserver.OnScrollChangedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onGlobalLayout() {
|
public void onScrollChanged() {
|
||||||
Rect visibleDisplayFrame = new Rect();
|
setShadowOnScrollableView();
|
||||||
buttonsHeight = getResources().getDimensionPixelSize(R.dimen.dialog_button_ex_max_width);
|
|
||||||
shadowHeight = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_top_shadow_height);
|
|
||||||
scrollView = getView().findViewById(R.id.scroll_view);
|
|
||||||
scrollView.getWindowVisibleDisplayFrame(visibleDisplayFrame);
|
|
||||||
int viewHeight = scrollView.getHeight();
|
|
||||||
int contentHeight = visibleDisplayFrame.bottom - visibleDisplayFrame.top - buttonsHeight;
|
|
||||||
if (contentHeightPrevious != contentHeight) {
|
|
||||||
boolean showTopShadow;
|
|
||||||
showTopShadow = viewHeight + shadowHeight < contentHeight;
|
|
||||||
scrollView.requestLayout();
|
|
||||||
contentHeightPrevious = contentHeight;
|
|
||||||
drawTopShadow(showTopShadow);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package net.osmand.plus.osmedit.dialogs;
|
package net.osmand.plus.osmedit.dialogs;
|
||||||
|
|
||||||
import android.graphics.Rect;
|
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
|
@ -54,9 +53,6 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
private TextInputEditText tagsField;
|
private TextInputEditText tagsField;
|
||||||
private TextInputEditText messageField;
|
private TextInputEditText messageField;
|
||||||
private int contentHeightPrevious = 0;
|
|
||||||
private int buttonsHeight;
|
|
||||||
private int shadowHeight;
|
|
||||||
private ScrollView scrollView;
|
private ScrollView scrollView;
|
||||||
|
|
||||||
public void setGpxInfos(GpxInfo[] gpxInfos) {
|
public void setGpxInfos(GpxInfo[] gpxInfos) {
|
||||||
|
@ -70,7 +66,7 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
|
|
||||||
LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode);
|
LayoutInflater themedInflater = UiUtilities.getInflater(app, nightMode);
|
||||||
View sendGpxView = themedInflater.inflate(R.layout.send_gpx_fragment, null);
|
View sendGpxView = themedInflater.inflate(R.layout.send_gpx_fragment, null);
|
||||||
sendGpxView.getViewTreeObserver().addOnGlobalLayoutListener(getOnGlobalLayoutListener());
|
sendGpxView.getViewTreeObserver().addOnScrollChangedListener(getOnGlobalLayoutListener());
|
||||||
|
|
||||||
tagsField = sendGpxView.findViewById(R.id.tags_field);
|
tagsField = sendGpxView.findViewById(R.id.tags_field);
|
||||||
messageField = sendGpxView.findViewById(R.id.message_field);
|
messageField = sendGpxView.findViewById(R.id.message_field);
|
||||||
|
@ -132,23 +128,16 @@ public class SendGpxBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
items.add(titleItem);
|
items.add(titleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ViewTreeObserver.OnGlobalLayoutListener getOnGlobalLayoutListener() {
|
private ViewTreeObserver.OnScrollChangedListener getOnGlobalLayoutListener() {
|
||||||
return new ViewTreeObserver.OnGlobalLayoutListener() {
|
return new ViewTreeObserver.OnScrollChangedListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onGlobalLayout() {
|
public void onScrollChanged() {
|
||||||
Rect visibleDisplayFrame = new Rect();
|
|
||||||
buttonsHeight = getResources().getDimensionPixelSize(R.dimen.dialog_button_ex_max_width);
|
|
||||||
shadowHeight = getResources().getDimensionPixelSize(R.dimen.bottom_sheet_top_shadow_height);
|
|
||||||
scrollView = getView().findViewById(R.id.scroll_view);
|
scrollView = getView().findViewById(R.id.scroll_view);
|
||||||
scrollView.getWindowVisibleDisplayFrame(visibleDisplayFrame);
|
if (scrollView.canScrollVertically(1) || scrollView.canScrollVertically(-1)) {
|
||||||
int viewHeight = scrollView.getHeight();
|
drawTopShadow(false);
|
||||||
int contentHeight = visibleDisplayFrame.bottom - visibleDisplayFrame.top - buttonsHeight;
|
scrollView.getChildAt(0).setPadding(0, 8, 0, 0);
|
||||||
if (contentHeightPrevious != contentHeight) {
|
} else {
|
||||||
boolean showTopShadow;
|
drawTopShadow(true);
|
||||||
showTopShadow = viewHeight + shadowHeight < contentHeight;
|
|
||||||
scrollView.requestLayout();
|
|
||||||
contentHeightPrevious = contentHeight;
|
|
||||||
drawTopShadow(showTopShadow);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,6 +6,7 @@ import android.os.Bundle;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
@ -77,6 +78,7 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen
|
||||||
|
|
||||||
final View sendOsmNoteView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
final View sendOsmNoteView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||||
R.layout.send_osm_note_fragment, null);
|
R.layout.send_osm_note_fragment, null);
|
||||||
|
sendOsmNoteView.getViewTreeObserver().addOnScrollChangedListener(getOnGlobalLayoutListener());
|
||||||
|
|
||||||
noteText = sendOsmNoteView.findViewById(R.id.note_text);
|
noteText = sendOsmNoteView.findViewById(R.id.note_text);
|
||||||
noteText.setText(((OsmNotesPoint) poi[0]).getText());
|
noteText.setText(((OsmNotesPoint) poi[0]).getText());
|
||||||
|
@ -148,6 +150,15 @@ public class SendOsmNoteBottomSheetFragment extends MenuBottomSheetDialogFragmen
|
||||||
items.add(bottomSheetItem);
|
items.add(bottomSheetItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ViewTreeObserver.OnScrollChangedListener getOnGlobalLayoutListener() {
|
||||||
|
return new ViewTreeObserver.OnScrollChangedListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrollChanged() {
|
||||||
|
setShadowOnScrollableView();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
private void updateAccountName() {
|
private void updateAccountName() {
|
||||||
String userNameOAuth = settings.USER_DISPLAY_NAME.get();
|
String userNameOAuth = settings.USER_DISPLAY_NAME.get();
|
||||||
String userNameOpenID = settings.USER_NAME.get();
|
String userNameOpenID = settings.USER_NAME.get();
|
||||||
|
|
|
@ -4,6 +4,7 @@ import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.ContextThemeWrapper;
|
import android.view.ContextThemeWrapper;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.view.ViewTreeObserver;
|
||||||
import android.widget.CompoundButton;
|
import android.widget.CompoundButton;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
|
@ -60,6 +61,7 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
final boolean isNightMode = app.getDaynightHelper().isNightModeForMapControls();
|
final boolean isNightMode = app.getDaynightHelper().isNightModeForMapControls();
|
||||||
final View sendOsmPoiView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
final View sendOsmPoiView = View.inflate(new ContextThemeWrapper(getContext(), themeRes),
|
||||||
R.layout.send_poi_fragment, null);
|
R.layout.send_poi_fragment, null);
|
||||||
|
sendOsmPoiView.getViewTreeObserver().addOnScrollChangedListener(getOnGlobalLayoutListener());
|
||||||
closeChangeSet = sendOsmPoiView.findViewById(R.id.close_change_set_checkbox);
|
closeChangeSet = sendOsmPoiView.findViewById(R.id.close_change_set_checkbox);
|
||||||
messageEditText = sendOsmPoiView.findViewById(R.id.message_field);
|
messageEditText = sendOsmPoiView.findViewById(R.id.message_field);
|
||||||
String defaultChangeSet = createDefaultChangeSet(app);
|
String defaultChangeSet = createDefaultChangeSet(app);
|
||||||
|
@ -104,6 +106,15 @@ public class SendPoiBottomSheetFragment extends MenuBottomSheetDialogFragment {
|
||||||
items.add(titleItem);
|
items.add(titleItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ViewTreeObserver.OnScrollChangedListener getOnGlobalLayoutListener() {
|
||||||
|
return new ViewTreeObserver.OnScrollChangedListener() {
|
||||||
|
@Override
|
||||||
|
public void onScrollChanged() {
|
||||||
|
setShadowOnScrollableView();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public static void showInstance(@NonNull FragmentManager fm, @NonNull OsmPoint[] points) {
|
public static void showInstance(@NonNull FragmentManager fm, @NonNull OsmPoint[] points) {
|
||||||
try {
|
try {
|
||||||
if (!fm.isStateSaved()) {
|
if (!fm.isStateSaved()) {
|
||||||
|
|
Loading…
Reference in a new issue