forked from organicmaps/organicmaps
[android] fix: Placepage visual artifacts fixes.
This commit is contained in:
parent
43c941d42c
commit
6e7a770864
10 changed files with 40 additions and 31 deletions
|
@ -36,6 +36,7 @@
|
|||
android:layout_width="360dp"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_below="@+id/fl__routing"
|
||||
android:background="@color/bg_top_panels"
|
||||
placePage:animationType="leftFull"/>
|
||||
|
||||
<com.mapswithme.maps.widget.FadeView
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
android:background="@drawable/bg_place_page_back"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/pp__details_frame"
|
||||
layout="@layout/place_page_details"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
android:layout_above="@+id/pp__buttons"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/pp__details_frame"
|
||||
layout="@layout/place_page_details"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_above="@+id/pp__buttons"
|
||||
android:background="@color/bg_top_panels"
|
||||
android:orientation="vertical">
|
||||
|
||||
<include
|
||||
|
@ -13,7 +14,8 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
|
||||
<include layout="@layout/place_page_details"/>
|
||||
<include android:id="@+id/pp__details_frame"
|
||||
layout="@layout/place_page_details"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
|
|
|
@ -1,7 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<merge xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<com.mapswithme.maps.widget.ObservableScrollView
|
||||
android:id="@+id/pp__details"
|
||||
android:layout_width="match_parent"
|
||||
|
@ -56,4 +54,4 @@
|
|||
<include layout="@layout/shadow_bottom"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</FrameLayout>
|
||||
</merge>
|
|
@ -15,6 +15,7 @@
|
|||
android:background="@drawable/bg_place_page_back"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/pp__details_frame"
|
||||
layout="@layout/place_page_details"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.mapswithme.maps.widget.placepage;
|
|||
import android.support.annotation.NonNull;
|
||||
import android.support.v4.view.GestureDetectorCompat;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
import android.view.ViewConfiguration;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.ScrollView;
|
||||
|
@ -23,7 +24,9 @@ public abstract class BasePlacePageAnimationController
|
|||
|
||||
protected PlacePageView mPlacePage;
|
||||
protected ViewGroup mPreview;
|
||||
protected ViewGroup mFrame;
|
||||
protected ScrollView mDetails;
|
||||
protected View mDetailsContent;
|
||||
protected ViewGroup mBookmarkDetails;
|
||||
protected ViewGroup mButtons;
|
||||
// Gestures
|
||||
|
@ -50,8 +53,10 @@ public abstract class BasePlacePageAnimationController
|
|||
{
|
||||
mPlacePage = placePage;
|
||||
mPreview = (ViewGroup) placePage.findViewById(R.id.pp__preview);
|
||||
mFrame = (ViewGroup) placePage.findViewById(R.id.pp__details_frame);
|
||||
mDetails = (ScrollView) placePage.findViewById(R.id.pp__details);
|
||||
mBookmarkDetails = (ViewGroup) mDetails.findViewById(R.id.rl__bookmark_details);
|
||||
mDetailsContent = mDetails.getChildAt(0);
|
||||
mBookmarkDetails = (ViewGroup) mFrame.findViewById(R.id.rl__bookmark_details);
|
||||
mButtons = (ViewGroup) placePage.findViewById(R.id.pp__buttons);
|
||||
initGestureDetector();
|
||||
|
||||
|
|
|
@ -60,8 +60,8 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
case MotionEvent.ACTION_MOVE:
|
||||
final float yDiff = mDownCoord - event.getY();
|
||||
if (mDownCoord < ViewHelper.getY(mPreview) || mDownCoord > ViewHelper.getY(mButtons) ||
|
||||
(mDownCoord > ViewHelper.getY(mDetails) && mDownCoord < ViewHelper.getY(mButtons) &&
|
||||
(mDetails.getHeight() != mDetails.getChildAt(0).getHeight() && (mDetails.getScrollY() != 0 || yDiff > 0))))
|
||||
(mDownCoord > ViewHelper.getY(mFrame) && mDownCoord < ViewHelper.getY(mButtons) &&
|
||||
(mFrame.getHeight() != mDetailsContent.getHeight() && (mDetails.getScrollY() != 0 || yDiff > 0))))
|
||||
return false;
|
||||
if (Math.abs(yDiff) > mTouchSlop)
|
||||
return true;
|
||||
|
@ -120,7 +120,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
@Override
|
||||
public boolean onSingleTapConfirmed(MotionEvent e)
|
||||
{
|
||||
if (mDownCoord < ViewHelper.getY(mPreview) && mDownCoord < ViewHelper.getY(mDetails))
|
||||
if (mDownCoord < ViewHelper.getY(mPreview) && mDownCoord < ViewHelper.getY(mFrame))
|
||||
return false;
|
||||
|
||||
if (mPlacePage.getState() == State.PREVIEW)
|
||||
|
@ -157,7 +157,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.addOnLayoutChangeListener(this);
|
||||
mFrame.addOnLayoutChangeListener(this);
|
||||
if (mLayoutToolbar != null)
|
||||
mLayoutToolbar.setVisibility(View.GONE);
|
||||
|
||||
|
@ -166,7 +166,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
if (currentState == State.HIDDEN)
|
||||
{
|
||||
mViewBottomHack.setVisibility(View.GONE);
|
||||
mDetails.setVisibility(View.INVISIBLE);
|
||||
mFrame.setVisibility(View.INVISIBLE);
|
||||
interpolator = new OvershootInterpolator();
|
||||
animator = ValueAnimator.ofFloat(mPreview.getHeight() + mButtons.getHeight(), 0f);
|
||||
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
|
||||
|
@ -194,7 +194,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
}
|
||||
else
|
||||
{
|
||||
final float detailsHeight = mDetails.getHeight();
|
||||
final float detailsHeight = mFrame.getHeight();
|
||||
interpolator = new AccelerateInterpolator();
|
||||
animator = ValueAnimator.ofFloat(ViewHelper.getTranslationY(mPreview), 0f);
|
||||
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()
|
||||
|
@ -203,7 +203,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
public void onAnimationUpdate(ValueAnimator animation)
|
||||
{
|
||||
ViewHelper.setTranslationY(mPreview, (Float) animation.getAnimatedValue());
|
||||
ViewHelper.setTranslationY(mDetails, (Float) animation.getAnimatedValue() + detailsHeight);
|
||||
ViewHelper.setTranslationY(mFrame, (Float) animation.getAnimatedValue() + detailsHeight);
|
||||
}
|
||||
});
|
||||
animator.addListener(new UiUtils.SimpleNineoldAnimationListener()
|
||||
|
@ -211,7 +211,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
@Override
|
||||
public void onAnimationEnd(Animator animation)
|
||||
{
|
||||
mDetails.setVisibility(View.INVISIBLE);
|
||||
mFrame.setVisibility(View.INVISIBLE);
|
||||
mBookmarkDetails.setVisibility(View.INVISIBLE);
|
||||
mIsPlacePageVisible = false;
|
||||
mIsPreviewVisible = true;
|
||||
|
@ -228,10 +228,10 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.setVisibility(View.VISIBLE);
|
||||
mFrame.setVisibility(View.VISIBLE);
|
||||
|
||||
ValueAnimator animator;
|
||||
final float detailsFullHeight = mDetails.getChildAt(0).getHeight();
|
||||
final float detailsFullHeight = mDetailsContent.getHeight();
|
||||
final float detailsScreenHeight = mDetails.getHeight();
|
||||
final float bookmarkFullHeight = mBookmarkDetails.getHeight();
|
||||
final float bookmarkScreenHeight = bookmarkFullHeight - (detailsFullHeight - detailsScreenHeight);
|
||||
|
@ -247,7 +247,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
public void onAnimationUpdate(ValueAnimator animation)
|
||||
{
|
||||
ViewHelper.setTranslationY(mPreview, (Float) animation.getAnimatedValue() - detailsScreenHeight);
|
||||
ViewHelper.setTranslationY(mDetails, (Float) animation.getAnimatedValue());
|
||||
ViewHelper.setTranslationY(mFrame, (Float) animation.getAnimatedValue());
|
||||
}
|
||||
});
|
||||
animator.addListener(new UiUtils.SimpleNineoldAnimationListener()
|
||||
|
@ -272,11 +272,11 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.setVisibility(View.VISIBLE);
|
||||
mFrame.setVisibility(View.VISIBLE);
|
||||
mBookmarkDetails.setVisibility(View.VISIBLE);
|
||||
|
||||
ValueAnimator animator;
|
||||
final float detailsFullHeight = mDetails.getChildAt(0).getHeight();
|
||||
final float detailsFullHeight = mDetailsContent.getHeight();
|
||||
final float detailsScreenHeight = mDetails.getHeight();
|
||||
final float bookmarkHeight = mBookmarkDetails.getHeight();
|
||||
final float bookmarkScreenHeight = bookmarkHeight - (detailsFullHeight - detailsScreenHeight);
|
||||
|
@ -292,7 +292,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
public void onAnimationUpdate(ValueAnimator animation)
|
||||
{
|
||||
ViewHelper.setTranslationY(mPreview, (Float) animation.getAnimatedValue() - detailsScreenHeight);
|
||||
ViewHelper.setTranslationY(mDetails, (Float) animation.getAnimatedValue());
|
||||
ViewHelper.setTranslationY(mFrame, (Float) animation.getAnimatedValue());
|
||||
}
|
||||
});
|
||||
animator.addListener(new UiUtils.SimpleNineoldAnimationListener()
|
||||
|
@ -314,7 +314,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
private void refreshToolbarVisibility()
|
||||
{
|
||||
if (mLayoutToolbar != null)
|
||||
mLayoutToolbar.setVisibility(ViewHelper.getY(mDetails) < mPreview.getHeight() ? View.VISIBLE : View.GONE);
|
||||
mLayoutToolbar.setVisibility(ViewHelper.getY(mFrame) < mPreview.getHeight() ? View.VISIBLE : View.GONE);
|
||||
}
|
||||
|
||||
protected void hidePlacePage()
|
||||
|
@ -322,7 +322,7 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
if (mLayoutToolbar != null)
|
||||
mLayoutToolbar.setVisibility(View.GONE);
|
||||
|
||||
mDetails.removeOnLayoutChangeListener(this);
|
||||
mFrame.removeOnLayoutChangeListener(this);
|
||||
final float animHeight = mPlacePage.getHeight() - mPreview.getTop() - ViewHelper.getTranslationY(mPreview);
|
||||
final ValueAnimator animator = ValueAnimator.ofFloat(0f, animHeight);
|
||||
mViewBottomHack.setVisibility(View.GONE);
|
||||
|
@ -355,9 +355,9 @@ public class BottomPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
@Override
|
||||
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom)
|
||||
{
|
||||
if (mState == State.BOOKMARK && v.getId() == mDetails.getId() && top != oldTop)
|
||||
if (mState == State.BOOKMARK && v.getId() == mFrame.getId() && top != oldTop)
|
||||
{
|
||||
ViewHelper.setTranslationY(mPreview, -mDetails.getChildAt(0).getHeight());
|
||||
ViewHelper.setTranslationY(mPreview, -mDetailsContent.getHeight());
|
||||
refreshToolbarVisibility();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,7 +31,7 @@ public class CompatPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
final float yDiff = mDownCoord - event.getY();
|
||||
final float buttonsY = mButtons.getTop();
|
||||
if (mDownCoord < mPreview.getTop() || mDownCoord > buttonsY ||
|
||||
(mDownCoord > mDetails.getTop() && mDownCoord < buttonsY))
|
||||
(mDownCoord > mFrame.getTop() && mDownCoord < buttonsY))
|
||||
return false;
|
||||
if (Math.abs(yDiff) > mTouchSlop)
|
||||
return true;
|
||||
|
@ -91,7 +91,7 @@ public class CompatPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
@Override
|
||||
public boolean onSingleTapConfirmed(MotionEvent e)
|
||||
{
|
||||
if (mDownCoord < mPreview.getTop() && mDownCoord < mDetails.getTop())
|
||||
if (mDownCoord < mPreview.getTop() && mDownCoord < mFrame.getTop())
|
||||
return false;
|
||||
|
||||
if (mPlacePage.getState() == State.PREVIEW)
|
||||
|
@ -128,7 +128,7 @@ public class CompatPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.setVisibility(View.GONE);
|
||||
mFrame.setVisibility(View.GONE);
|
||||
|
||||
mIsPlacePageVisible = false;
|
||||
mIsPreviewVisible = true;
|
||||
|
@ -139,7 +139,7 @@ public class CompatPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.setVisibility(View.VISIBLE);
|
||||
mFrame.setVisibility(View.VISIBLE);
|
||||
mBookmarkDetails.setVisibility(View.GONE);
|
||||
|
||||
mIsPreviewVisible = mIsPlacePageVisible = true;
|
||||
|
@ -150,7 +150,7 @@ public class CompatPlacePageAnimationController extends BasePlacePageAnimationCo
|
|||
{
|
||||
mPlacePage.setVisibility(View.VISIBLE);
|
||||
mPreview.setVisibility(View.VISIBLE);
|
||||
mDetails.setVisibility(View.VISIBLE);
|
||||
mFrame.setVisibility(View.VISIBLE);
|
||||
mBookmarkDetails.setVisibility(View.VISIBLE);
|
||||
mButtons.setVisibility(View.VISIBLE);
|
||||
mButtons.bringToFront();
|
||||
|
|
|
@ -34,8 +34,8 @@ public class LeftFloatPlacePageAnimationController extends BasePlacePageAnimatio
|
|||
case MotionEvent.ACTION_MOVE:
|
||||
final float yDiff = mDownCoord - event.getY();
|
||||
if (mDownCoord < ViewHelper.getY(mPreview) || mDownCoord > ViewHelper.getY(mButtons) ||
|
||||
(mDownCoord > ViewHelper.getY(mDetails) && mDownCoord < ViewHelper.getY(mButtons) &&
|
||||
(mDetails.getHeight() != mDetails.getChildAt(0).getHeight() && (mDetails.getScrollY() != 0 || yDiff > 0))))
|
||||
(mDownCoord > ViewHelper.getY(mFrame) && mDownCoord < ViewHelper.getY(mButtons) &&
|
||||
(mFrame.getHeight() != mDetailsContent.getHeight() && (mDetails.getScrollY() != 0 || yDiff > 0))))
|
||||
return false;
|
||||
if (Math.abs(yDiff) > mTouchSlop)
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue