forked from organicmaps/organicmaps-tmp
Animations for vertical bottom menu.
This commit is contained in:
parent
762dcf3c6c
commit
db057d1443
4 changed files with 123 additions and 52 deletions
|
@ -30,18 +30,24 @@
|
|||
android:layout_height="match_parent"
|
||||
android:layout_below="@id/search_box"/>
|
||||
|
||||
<FrameLayout
|
||||
<View
|
||||
android:id="@+id/fade_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:background="@android:color/black"
|
||||
android:visibility="gone"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/map_bottom_toolbar"
|
||||
layout="@layout/map_bottom_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="@dimen/bottom_panel_height"
|
||||
android:layout_alignParentBottom="true"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/map_bottom_vertical_toolbar"
|
||||
layout="@layout/map_bottom_vertical_toolbar"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_alignParentBottom="true">
|
||||
|
||||
<include
|
||||
android:id="@+id/map_bottom_toolbar"
|
||||
layout="@layout/map_bottom_toolbar"/>
|
||||
|
||||
<include
|
||||
android:id="@+id/map_bottom_vertical_toolbar"
|
||||
layout="@layout/map_bottom_vertical_toolbar"/>
|
||||
|
||||
</FrameLayout>
|
||||
android:layout_alignParentBottom="true"/>
|
||||
</RelativeLayout>
|
|
@ -23,6 +23,8 @@ import android.view.MotionEvent;
|
|||
import android.view.View;
|
||||
import android.view.View.OnClickListener;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.animation.AlphaAnimation;
|
||||
import android.view.animation.Animation;
|
||||
import android.widget.ImageButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
|
@ -99,8 +101,12 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
// Initialized to invalid combination to force update on the first check
|
||||
private boolean mStorageAvailable = false;
|
||||
private boolean mStorageWritable = true;
|
||||
// toolbars
|
||||
private static final long VERT_TOOLBAR_ANIM_DURATION = 250;
|
||||
private ViewGroup mVerticalToolbar;
|
||||
private ViewGroup mToolbar;
|
||||
private Animation mVerticalToolbarAnimation;
|
||||
private View mFadeView;
|
||||
|
||||
private static final String IS_KML_MOVED = "KmlBeenMoved";
|
||||
private static final String IS_KITKAT_MIGRATION_COMPLETED = "KitKatMigrationCompleted";
|
||||
|
@ -620,8 +626,67 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
|
||||
public void onMoreClicked(View v)
|
||||
{
|
||||
UiUtils.show(mVerticalToolbar);
|
||||
UiUtils.hide(mToolbar);
|
||||
setVerticalToolbarVisible(true);
|
||||
}
|
||||
|
||||
private void setVerticalToolbarVisible(boolean showVerticalToolbar)
|
||||
{
|
||||
if (mVerticalToolbarAnimation != null ||
|
||||
(mVerticalToolbar.getVisibility() == View.VISIBLE && showVerticalToolbar) ||
|
||||
(mVerticalToolbar.getVisibility() != View.VISIBLE && !showVerticalToolbar))
|
||||
return;
|
||||
|
||||
int fromY, toY;
|
||||
Animation.AnimationListener listener;
|
||||
float fromAlpha, toAlpha;
|
||||
if (showVerticalToolbar)
|
||||
{
|
||||
fromY = 1;
|
||||
toY = 0;
|
||||
fromAlpha = 0.0f;
|
||||
toAlpha = 0.5f;
|
||||
listener = new UiUtils.SimpleAnimationListener()
|
||||
{
|
||||
@Override
|
||||
public void onAnimationStart(Animation animation)
|
||||
{
|
||||
mVerticalToolbar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAnimationEnd(Animation animation)
|
||||
{
|
||||
mVerticalToolbarAnimation = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
fromY = 0;
|
||||
toY = 1;
|
||||
fromAlpha = 0.5f;
|
||||
toAlpha = 0.0f;
|
||||
listener = new UiUtils.SimpleAnimationListener()
|
||||
{
|
||||
@Override
|
||||
public void onAnimationEnd(Animation animation)
|
||||
{
|
||||
mVerticalToolbar.setVisibility(View.INVISIBLE);
|
||||
mVerticalToolbarAnimation = null;
|
||||
}
|
||||
};
|
||||
}
|
||||
// slide vertical toolbar
|
||||
mVerticalToolbarAnimation = UiUtils.generateSlideAnimation(0, 0, fromY, toY);
|
||||
mVerticalToolbarAnimation.setDuration(VERT_TOOLBAR_ANIM_DURATION);
|
||||
mVerticalToolbarAnimation.setAnimationListener(listener);
|
||||
mVerticalToolbar.startAnimation(mVerticalToolbarAnimation);
|
||||
// fade map
|
||||
Animation alphaAnimation = new AlphaAnimation(fromAlpha, toAlpha);
|
||||
alphaAnimation.setFillBefore(true);
|
||||
alphaAnimation.setFillAfter(true);
|
||||
alphaAnimation.setDuration(VERT_TOOLBAR_ANIM_DURATION);
|
||||
mFadeView.startAnimation(alphaAnimation);
|
||||
}
|
||||
|
||||
private void shareMyLocation()
|
||||
|
@ -759,15 +824,19 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
mVerticalToolbar.findViewById(R.id.btn_settings).setOnClickListener(this);
|
||||
View moreApps = mVerticalToolbar.findViewById(R.id.btn_more_apps);
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB || Framework.getGuideIds().length == 0)
|
||||
{
|
||||
UiUtils.hide(moreApps);
|
||||
}
|
||||
else
|
||||
{
|
||||
moreApps.setOnClickListener(this);
|
||||
}
|
||||
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.invisible(mVerticalToolbar);
|
||||
|
||||
// hacky way to implement alpha at pre-honeycomb SDK.
|
||||
mFadeView = findViewById(R.id.fade_view);
|
||||
Animation alphaAnimation = new AlphaAnimation(0.0f, 0.0f);
|
||||
alphaAnimation.setFillAfter(true);
|
||||
alphaAnimation.setDuration(0);
|
||||
mFadeView.startAnimation(alphaAnimation);
|
||||
mFadeView.setVisibility(View.VISIBLE);
|
||||
}
|
||||
|
||||
private void setUpInfoBox()
|
||||
|
@ -1127,10 +1196,7 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
deactivatePopup();
|
||||
}
|
||||
else if (mVerticalToolbar.getVisibility() == View.VISIBLE)
|
||||
{
|
||||
UiUtils.show(mToolbar);
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
}
|
||||
setVerticalToolbarVisible(false);
|
||||
else
|
||||
super.onBackPressed();
|
||||
}
|
||||
|
@ -1283,13 +1349,13 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
@Override
|
||||
public void onPreviewVisibilityChanged(boolean isVisible)
|
||||
{
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPlacePageVisibilityChanged(boolean isVisible)
|
||||
{
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -1298,28 +1364,23 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
switch (v.getId())
|
||||
{
|
||||
case R.id.btn_buy_pro:
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
UiUtils.runProMarketActivity(MWMActivity.this);
|
||||
break;
|
||||
case R.id.btn_share:
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
shareMyLocation();
|
||||
break;
|
||||
case R.id.btn_settings:
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
startActivity(new Intent(this, SettingsActivity.class));
|
||||
break;
|
||||
case R.id.btn_download_maps:
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
runDownloadActivity();
|
||||
break;
|
||||
case R.id.btn_more_apps:
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
setVerticalToolbarVisible(false);
|
||||
startActivity(new Intent(this, MoreAppsActivity.class));
|
||||
break;
|
||||
default:
|
||||
|
@ -1330,8 +1391,12 @@ public class MWMActivity extends NvEventQueueActivity
|
|||
@Override
|
||||
public boolean onTouch(View view, MotionEvent event)
|
||||
{
|
||||
UiUtils.hide(mVerticalToolbar);
|
||||
UiUtils.show(mToolbar);
|
||||
// if vertical toolbar is visible - hide it and ignore touch
|
||||
if (mVerticalToolbar.getVisibility() == View.VISIBLE)
|
||||
{
|
||||
setVerticalToolbarVisible(false);
|
||||
return true;
|
||||
}
|
||||
if (mInfoView.getState() == State.FULL_PLACEPAGE)
|
||||
{
|
||||
deactivatePopup();
|
||||
|
|
|
@ -258,7 +258,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
TranslateAnimation slide;
|
||||
if (show) // slide up
|
||||
{
|
||||
slide = generateSlideAnimation(0, 0, -1, 0);
|
||||
slide = UiUtils.generateSlideAnimation(0, 0, -1, 0);
|
||||
slide.setDuration(SHORT_ANIM_DURATION);
|
||||
UiUtils.show(mPlacePageGroup);
|
||||
UiUtils.hide(mArrow);
|
||||
|
@ -267,7 +267,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
}
|
||||
else // slide down
|
||||
{
|
||||
slide = generateSlideAnimation(0, 0, 0, -1);
|
||||
slide = UiUtils.generateSlideAnimation(0, 0, 0, -1);
|
||||
|
||||
slide.setDuration(SHORT_ANIM_DURATION);
|
||||
slide.setFillEnabled(true);
|
||||
|
@ -298,7 +298,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
TranslateAnimation slide;
|
||||
if (show)
|
||||
{
|
||||
slide = generateSlideAnimation(0, 0, -1, 0);
|
||||
slide = UiUtils.generateSlideAnimation(0, 0, -1, 0);
|
||||
UiUtils.show(mPreviewGroup);
|
||||
slide.setAnimationListener(new SimpleAnimationListener()
|
||||
{
|
||||
|
@ -312,7 +312,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
}
|
||||
else
|
||||
{
|
||||
slide = generateSlideAnimation(0, 0, 0, -1);
|
||||
slide = UiUtils.generateSlideAnimation(0, 0, 0, -1);
|
||||
slide.setAnimationListener(new SimpleAnimationListener()
|
||||
{
|
||||
@Override
|
||||
|
@ -332,7 +332,7 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
|
||||
private void hideEverything()
|
||||
{
|
||||
final TranslateAnimation slideDown = generateSlideAnimation(0, 0, 0, -1);
|
||||
final TranslateAnimation slideDown = UiUtils.generateSlideAnimation(0, 0, 0, -1);
|
||||
slideDown.setDuration(LONG_ANIM_DURATION);
|
||||
|
||||
slideDown.setAnimationListener(new SimpleAnimationListener()
|
||||
|
@ -760,15 +760,6 @@ public class MapInfoView extends LinearLayout implements View.OnClickListener
|
|||
.drawCircleForPin(to, (int) getResources().getDimension(R.dimen.color_chooser_radius), getResources()));
|
||||
}
|
||||
|
||||
private TranslateAnimation generateSlideAnimation(float fromX, float toX, float fromY, float toY)
|
||||
{
|
||||
return new TranslateAnimation(
|
||||
Animation.RELATIVE_TO_SELF, fromX,
|
||||
Animation.RELATIVE_TO_SELF, toX,
|
||||
Animation.RELATIVE_TO_SELF, fromY,
|
||||
Animation.RELATIVE_TO_SELF, toY);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View v)
|
||||
{
|
||||
|
|
|
@ -21,6 +21,7 @@ import android.view.View.OnClickListener;
|
|||
import android.view.WindowManager;
|
||||
import android.view.animation.Animation;
|
||||
import android.view.animation.Animation.AnimationListener;
|
||||
import android.view.animation.TranslateAnimation;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
|
||||
|
@ -103,6 +104,15 @@ public final class UiUtils
|
|||
target.startAnimation(anim);
|
||||
}
|
||||
|
||||
public static TranslateAnimation generateSlideAnimation(float fromX, float toX, float fromY, float toY)
|
||||
{
|
||||
return new TranslateAnimation(
|
||||
Animation.RELATIVE_TO_SELF, fromX,
|
||||
Animation.RELATIVE_TO_SELF, toX,
|
||||
Animation.RELATIVE_TO_SELF, fromY,
|
||||
Animation.RELATIVE_TO_SELF, toY);
|
||||
}
|
||||
|
||||
public static Drawable setCompoundDrawableBounds(int drawableId, int dimenId, Resources res)
|
||||
{
|
||||
return setCompoundDrawableBounds(res.getDrawable(drawableId), dimenId, res);
|
||||
|
@ -349,7 +359,6 @@ public final class UiUtils
|
|||
return "hdpi";
|
||||
}
|
||||
|
||||
|
||||
// utility class
|
||||
private UiUtils()
|
||||
{}
|
||||
|
|
Loading…
Add table
Reference in a new issue