Animation should start and finish on widgets button when opening/closing widget tray.
b/21301759 Change-Id: Ib0b9132d8709426598d95fc9f60d37752e05b711
This commit is contained in:
@@ -263,6 +263,7 @@ public class Launcher extends Activity
|
|||||||
private ViewGroup mOverviewPanel;
|
private ViewGroup mOverviewPanel;
|
||||||
|
|
||||||
private View mAllAppsButton;
|
private View mAllAppsButton;
|
||||||
|
private View mWidgetsButton;
|
||||||
|
|
||||||
private SearchDropTargetBar mSearchDropTargetBar;
|
private SearchDropTargetBar mSearchDropTargetBar;
|
||||||
|
|
||||||
@@ -1370,8 +1371,8 @@ public class Launcher extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel);
|
mOverviewPanel = (ViewGroup) findViewById(R.id.overview_panel);
|
||||||
View widgetButton = findViewById(R.id.widget_button);
|
mWidgetsButton = findViewById(R.id.widget_button);
|
||||||
widgetButton.setOnClickListener(new OnClickListener() {
|
mWidgetsButton.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View arg0) {
|
public void onClick(View arg0) {
|
||||||
if (!mWorkspace.isSwitchingState()) {
|
if (!mWorkspace.isSwitchingState()) {
|
||||||
@@ -1379,7 +1380,7 @@ public class Launcher extends Activity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
widgetButton.setOnTouchListener(getHapticFeedbackTouchListener());
|
mWidgetsButton.setOnTouchListener(getHapticFeedbackTouchListener());
|
||||||
|
|
||||||
View wallpaperButton = findViewById(R.id.wallpaper_button);
|
View wallpaperButton = findViewById(R.id.wallpaper_button);
|
||||||
wallpaperButton.setOnClickListener(new OnClickListener() {
|
wallpaperButton.setOnClickListener(new OnClickListener() {
|
||||||
@@ -1465,6 +1466,10 @@ public class Launcher extends Activity
|
|||||||
return mAllAppsButton;
|
return mAllAppsButton;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public View getWidgetsButton() {
|
||||||
|
return mWidgetsButton;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a view representing a shortcut.
|
* Creates a view representing a shortcut.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -90,21 +90,14 @@ public class LauncherStateTransitionAnimation {
|
|||||||
* Private callbacks made during transition setup.
|
* Private callbacks made during transition setup.
|
||||||
*/
|
*/
|
||||||
static abstract class PrivateTransitionCallbacks {
|
static abstract class PrivateTransitionCallbacks {
|
||||||
void onRevealViewVisible(View revealView, View contentView, View allAppsButtonView) {}
|
|
||||||
float getMaterialRevealViewFinalAlpha(View revealView) {
|
float getMaterialRevealViewFinalAlpha(View revealView) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
float getMaterialRevealViewFinalXDrift(View revealView) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
float getMaterialRevealViewFinalYDrift(View revealView) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
float getMaterialRevealViewStartFinalRadius() {
|
float getMaterialRevealViewStartFinalRadius() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
AnimatorListenerAdapter getMaterialRevealViewAnimatorListener(View revealView,
|
AnimatorListenerAdapter getMaterialRevealViewAnimatorListener(View revealView,
|
||||||
View allAppsButtonView) {
|
View buttonView) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
void onTransitionComplete() {}
|
void onTransitionComplete() {}
|
||||||
@@ -135,30 +128,13 @@ public class LauncherStateTransitionAnimation {
|
|||||||
public void startAnimationToAllApps(final boolean animated,
|
public void startAnimationToAllApps(final boolean animated,
|
||||||
final boolean startSearchAfterTransition) {
|
final boolean startSearchAfterTransition) {
|
||||||
final AllAppsContainerView toView = mLauncher.getAppsView();
|
final AllAppsContainerView toView = mLauncher.getAppsView();
|
||||||
|
final View buttonView = mLauncher.getAllAppsButton();
|
||||||
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
||||||
private int[] mAllAppsToPanelDelta;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRevealViewVisible(View revealView, View contentView,
|
|
||||||
View allAppsButtonView) {
|
|
||||||
// Get the y delta between the center of the page and the center of the all apps
|
|
||||||
// button
|
|
||||||
mAllAppsToPanelDelta = Utilities.getCenterDeltaInScreenSpace(revealView,
|
|
||||||
allAppsButtonView, null);
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
public float getMaterialRevealViewFinalAlpha(View revealView) {
|
public float getMaterialRevealViewFinalAlpha(View revealView) {
|
||||||
return 1f;
|
return 1f;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public float getMaterialRevealViewFinalXDrift(View revealView) {
|
|
||||||
return mAllAppsToPanelDelta[0];
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewFinalYDrift(View revealView) {
|
|
||||||
return mAllAppsToPanelDelta[1];
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewStartFinalRadius() {
|
public float getMaterialRevealViewStartFinalRadius() {
|
||||||
int allAppsButtonSize = mLauncher.getDeviceProfile().allAppsButtonVisualSize;
|
int allAppsButtonSize = mLauncher.getDeviceProfile().allAppsButtonVisualSize;
|
||||||
return allAppsButtonSize / 2;
|
return allAppsButtonSize / 2;
|
||||||
@@ -183,9 +159,9 @@ public class LauncherStateTransitionAnimation {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
// Only animate the search bar if animating from spring loaded mode back to all apps
|
// Only animate the search bar if animating from spring loaded mode back to all apps
|
||||||
startAnimationToOverlay(Workspace.State.NORMAL_HIDDEN, toView, toView.getContentView(),
|
startAnimationToOverlay(Workspace.State.NORMAL_HIDDEN, buttonView, toView,
|
||||||
toView.getRevealView(), toView.getSearchBarView(), animated,
|
toView.getContentView(), toView.getRevealView(), toView.getSearchBarView(),
|
||||||
true /* hideSearchBar */, cb);
|
animated, true /* hideSearchBar */, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -193,22 +169,15 @@ public class LauncherStateTransitionAnimation {
|
|||||||
*/
|
*/
|
||||||
public void startAnimationToWidgets(final boolean animated) {
|
public void startAnimationToWidgets(final boolean animated) {
|
||||||
final WidgetsContainerView toView = mLauncher.getWidgetsView();
|
final WidgetsContainerView toView = mLauncher.getWidgetsView();
|
||||||
final Resources res = mLauncher.getResources();
|
final View buttonView = mLauncher.getWidgetsButton();
|
||||||
|
|
||||||
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
||||||
@Override
|
|
||||||
public void onRevealViewVisible(View revealView, View contentView,
|
|
||||||
View allAppsButtonView) {
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
public float getMaterialRevealViewFinalAlpha(View revealView) {
|
public float getMaterialRevealViewFinalAlpha(View revealView) {
|
||||||
return 0.3f;
|
return 0.3f;
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewFinalYDrift(View revealView) {
|
|
||||||
return revealView.getMeasuredHeight() / 2;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
startAnimationToOverlay(Workspace.State.OVERVIEW_HIDDEN, toView,
|
startAnimationToOverlay(Workspace.State.OVERVIEW_HIDDEN, buttonView, toView,
|
||||||
toView.getContentView(), toView.getRevealView(), null, animated,
|
toView.getContentView(), toView.getRevealView(), null, animated,
|
||||||
true /* hideSearchBar */, cb);
|
true /* hideSearchBar */, cb);
|
||||||
}
|
}
|
||||||
@@ -238,23 +207,22 @@ public class LauncherStateTransitionAnimation {
|
|||||||
* Creates and starts a new animation to a particular overlay view.
|
* Creates and starts a new animation to a particular overlay view.
|
||||||
*/
|
*/
|
||||||
@SuppressLint("NewApi")
|
@SuppressLint("NewApi")
|
||||||
private void startAnimationToOverlay(final Workspace.State toWorkspaceState, final View toView,
|
private void startAnimationToOverlay(final Workspace.State toWorkspaceState,
|
||||||
final View contentView, final View revealView, final View overlaySearchBarView,
|
final View buttonView, final View toView, final View contentView, final View revealView,
|
||||||
final boolean animated, final boolean hideSearchBar,
|
final View overlaySearchBarView, final boolean animated, final boolean hideSearchBar,
|
||||||
final PrivateTransitionCallbacks pCb) {
|
final PrivateTransitionCallbacks pCb) {
|
||||||
final Resources res = mLauncher.getResources();
|
final Resources res = mLauncher.getResources();
|
||||||
final boolean material = Utilities.isLmpOrAbove();
|
final boolean material = Utilities.isLmpOrAbove();
|
||||||
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
|
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
|
||||||
final int itemsAlphaStagger =
|
final int itemsAlphaStagger =
|
||||||
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
|
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
|
||||||
|
|
||||||
final View allAppsButtonView = mLauncher.getAllAppsButton();
|
|
||||||
final View fromView = mLauncher.getWorkspace();
|
final View fromView = mLauncher.getWorkspace();
|
||||||
|
|
||||||
final HashMap<View, Integer> layerViews = new HashMap<>();
|
final HashMap<View, Integer> layerViews = new HashMap<>();
|
||||||
|
|
||||||
// If for some reason our views aren't initialized, don't animate
|
// If for some reason our views aren't initialized, don't animate
|
||||||
boolean initialized = allAppsButtonView != null;
|
boolean initialized = buttonView != null;
|
||||||
|
|
||||||
// Cancel the current animation
|
// Cancel the current animation
|
||||||
cancelAnimation();
|
cancelAnimation();
|
||||||
@@ -275,16 +243,17 @@ public class LauncherStateTransitionAnimation {
|
|||||||
revealView.setAlpha(0f);
|
revealView.setAlpha(0f);
|
||||||
revealView.setTranslationY(0f);
|
revealView.setTranslationY(0f);
|
||||||
revealView.setTranslationX(0f);
|
revealView.setTranslationX(0f);
|
||||||
pCb.onRevealViewVisible(revealView, contentView, allAppsButtonView);
|
|
||||||
|
|
||||||
// Calculate the final animation values
|
// Calculate the final animation values
|
||||||
final float revealViewToAlpha;
|
final float revealViewToAlpha;
|
||||||
final float revealViewToXDrift;
|
final float revealViewToXDrift;
|
||||||
final float revealViewToYDrift;
|
final float revealViewToYDrift;
|
||||||
if (material) {
|
if (material) {
|
||||||
|
int[] buttonViewToPanelDelta = Utilities.getCenterDeltaInScreenSpace(revealView,
|
||||||
|
buttonView, null);
|
||||||
revealViewToAlpha = pCb.getMaterialRevealViewFinalAlpha(revealView);
|
revealViewToAlpha = pCb.getMaterialRevealViewFinalAlpha(revealView);
|
||||||
revealViewToYDrift = pCb.getMaterialRevealViewFinalYDrift(revealView);
|
revealViewToYDrift = buttonViewToPanelDelta[1];
|
||||||
revealViewToXDrift = pCb.getMaterialRevealViewFinalXDrift(revealView);
|
revealViewToXDrift = buttonViewToPanelDelta[0];
|
||||||
} else {
|
} else {
|
||||||
revealViewToAlpha = 0f;
|
revealViewToAlpha = 0f;
|
||||||
revealViewToYDrift = 2 * height / 3;
|
revealViewToYDrift = 2 * height / 3;
|
||||||
@@ -337,10 +306,9 @@ public class LauncherStateTransitionAnimation {
|
|||||||
mStateAnimation.play(itemsAlpha);
|
mStateAnimation.play(itemsAlpha);
|
||||||
|
|
||||||
if (material) {
|
if (material) {
|
||||||
// Animate the all apps button
|
|
||||||
float startRadius = pCb.getMaterialRevealViewStartFinalRadius();
|
float startRadius = pCb.getMaterialRevealViewStartFinalRadius();
|
||||||
AnimatorListenerAdapter listener = pCb.getMaterialRevealViewAnimatorListener(
|
AnimatorListenerAdapter listener = pCb.getMaterialRevealViewAnimatorListener(
|
||||||
revealView, allAppsButtonView);
|
revealView, buttonView);
|
||||||
Animator reveal = UiThreadCircularReveal.createCircularReveal(revealView, width / 2,
|
Animator reveal = UiThreadCircularReveal.createCircularReveal(revealView, width / 2,
|
||||||
height / 2, startRadius, revealRadius);
|
height / 2, startRadius, revealRadius);
|
||||||
reveal.setDuration(revealDuration);
|
reveal.setDuration(revealDuration);
|
||||||
@@ -452,22 +420,6 @@ public class LauncherStateTransitionAnimation {
|
|||||||
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
||||||
int[] mAllAppsToPanelDelta;
|
int[] mAllAppsToPanelDelta;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRevealViewVisible(View revealView, View contentView,
|
|
||||||
View allAppsButtonView) {
|
|
||||||
// Get the y delta between the center of the page and the center of the all apps
|
|
||||||
// button
|
|
||||||
mAllAppsToPanelDelta = Utilities.getCenterDeltaInScreenSpace(revealView,
|
|
||||||
allAppsButtonView, null);
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewFinalXDrift(View revealView) {
|
|
||||||
return mAllAppsToPanelDelta[0];
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewFinalYDrift(View revealView) {
|
|
||||||
return mAllAppsToPanelDelta[1];
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
float getMaterialRevealViewFinalAlpha(View revealView) {
|
float getMaterialRevealViewFinalAlpha(View revealView) {
|
||||||
// No alpha anim from all apps
|
// No alpha anim from all apps
|
||||||
@@ -499,9 +451,10 @@ public class LauncherStateTransitionAnimation {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
// Only animate the search bar if animating to spring loaded mode from all apps
|
// Only animate the search bar if animating to spring loaded mode from all apps
|
||||||
startAnimationToWorkspaceFromOverlay(toWorkspaceState, toWorkspacePage, appsView,
|
startAnimationToWorkspaceFromOverlay(toWorkspaceState, toWorkspacePage,
|
||||||
appsView.getContentView(), appsView.getRevealView(), appsView.getSearchBarView(),
|
mLauncher.getAllAppsButton(), appsView, appsView.getContentView(),
|
||||||
animated, onCompleteRunnable, cb);
|
appsView.getRevealView(), appsView.getSearchBarView(), animated,
|
||||||
|
onCompleteRunnable, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -510,23 +463,14 @@ public class LauncherStateTransitionAnimation {
|
|||||||
private void startAnimationToWorkspaceFromWidgets(final Workspace.State toWorkspaceState,
|
private void startAnimationToWorkspaceFromWidgets(final Workspace.State toWorkspaceState,
|
||||||
final int toWorkspacePage, final boolean animated, final Runnable onCompleteRunnable) {
|
final int toWorkspacePage, final boolean animated, final Runnable onCompleteRunnable) {
|
||||||
final WidgetsContainerView widgetsView = mLauncher.getWidgetsView();
|
final WidgetsContainerView widgetsView = mLauncher.getWidgetsView();
|
||||||
final Resources res = mLauncher.getResources();
|
|
||||||
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
PrivateTransitionCallbacks cb = new PrivateTransitionCallbacks() {
|
||||||
@Override
|
|
||||||
public void onRevealViewVisible(View revealView, View contentView,
|
|
||||||
View allAppsButtonView) {
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public float getMaterialRevealViewFinalYDrift(View revealView) {
|
|
||||||
return revealView.getMeasuredHeight() / 2;
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
float getMaterialRevealViewFinalAlpha(View revealView) {
|
float getMaterialRevealViewFinalAlpha(View revealView) {
|
||||||
return 0.4f;
|
return 0.3f;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public AnimatorListenerAdapter getMaterialRevealViewAnimatorListener(
|
public AnimatorListenerAdapter getMaterialRevealViewAnimatorListener(
|
||||||
final View revealView, final View allAppsButtonView) {
|
final View revealView, final View widgetsButtonView) {
|
||||||
return new AnimatorListenerAdapter() {
|
return new AnimatorListenerAdapter() {
|
||||||
public void onAnimationEnd(Animator animation) {
|
public void onAnimationEnd(Animator animation) {
|
||||||
// Hide the reveal view
|
// Hide the reveal view
|
||||||
@@ -535,31 +479,31 @@ public class LauncherStateTransitionAnimation {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
startAnimationToWorkspaceFromOverlay(toWorkspaceState, toWorkspacePage, widgetsView,
|
startAnimationToWorkspaceFromOverlay(toWorkspaceState, toWorkspacePage,
|
||||||
widgetsView.getContentView(), widgetsView.getRevealView(), null, animated,
|
mLauncher.getWidgetsButton(), widgetsView, widgetsView.getContentView(),
|
||||||
onCompleteRunnable, cb);
|
widgetsView.getRevealView(), null, animated, onCompleteRunnable, cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates and starts a new animation to the workspace.
|
* Creates and starts a new animation to the workspace.
|
||||||
*/
|
*/
|
||||||
private void startAnimationToWorkspaceFromOverlay(final Workspace.State toWorkspaceState,
|
private void startAnimationToWorkspaceFromOverlay(final Workspace.State toWorkspaceState,
|
||||||
final int toWorkspacePage, final View fromView, final View contentView,
|
final int toWorkspacePage, final View buttonView, final View fromView,
|
||||||
final View revealView, final View overlaySearchBarView, final boolean animated,
|
final View contentView, final View revealView, final View overlaySearchBarView,
|
||||||
final Runnable onCompleteRunnable, final PrivateTransitionCallbacks pCb) {
|
final boolean animated, final Runnable onCompleteRunnable,
|
||||||
|
final PrivateTransitionCallbacks pCb) {
|
||||||
final Resources res = mLauncher.getResources();
|
final Resources res = mLauncher.getResources();
|
||||||
final boolean material = Utilities.isLmpOrAbove();
|
final boolean material = Utilities.isLmpOrAbove();
|
||||||
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
|
final int revealDuration = res.getInteger(R.integer.config_overlayRevealTime);
|
||||||
final int itemsAlphaStagger =
|
final int itemsAlphaStagger =
|
||||||
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
|
res.getInteger(R.integer.config_overlayItemsAlphaStagger);
|
||||||
|
|
||||||
final View allAppsButtonView = mLauncher.getAllAppsButton();
|
|
||||||
final View toView = mLauncher.getWorkspace();
|
final View toView = mLauncher.getWorkspace();
|
||||||
|
|
||||||
final HashMap<View, Integer> layerViews = new HashMap<>();
|
final HashMap<View, Integer> layerViews = new HashMap<>();
|
||||||
|
|
||||||
// If for some reason our views aren't initialized, don't animate
|
// If for some reason our views aren't initialized, don't animate
|
||||||
boolean initialized = allAppsButtonView != null;
|
boolean initialized = buttonView != null;
|
||||||
|
|
||||||
// Cancel the current animation
|
// Cancel the current animation
|
||||||
cancelAnimation();
|
cancelAnimation();
|
||||||
@@ -589,14 +533,15 @@ public class LauncherStateTransitionAnimation {
|
|||||||
revealView.setAlpha(1f);
|
revealView.setAlpha(1f);
|
||||||
revealView.setTranslationY(0);
|
revealView.setTranslationY(0);
|
||||||
layerViews.put(revealView, BUILD_AND_SET_LAYER);
|
layerViews.put(revealView, BUILD_AND_SET_LAYER);
|
||||||
pCb.onRevealViewVisible(revealView, contentView, allAppsButtonView);
|
|
||||||
|
|
||||||
// Calculate the final animation values
|
// Calculate the final animation values
|
||||||
final float revealViewToXDrift;
|
final float revealViewToXDrift;
|
||||||
final float revealViewToYDrift;
|
final float revealViewToYDrift;
|
||||||
if (material) {
|
if (material) {
|
||||||
revealViewToYDrift = pCb.getMaterialRevealViewFinalYDrift(revealView);
|
int[] buttonViewToPanelDelta = Utilities.getCenterDeltaInScreenSpace(revealView,
|
||||||
revealViewToXDrift = pCb.getMaterialRevealViewFinalXDrift(revealView);
|
buttonView, null);
|
||||||
|
revealViewToYDrift = buttonViewToPanelDelta[1];
|
||||||
|
revealViewToXDrift = buttonViewToPanelDelta[0];
|
||||||
} else {
|
} else {
|
||||||
revealViewToYDrift = 2 * height / 3;
|
revealViewToYDrift = 2 * height / 3;
|
||||||
revealViewToXDrift = 0;
|
revealViewToXDrift = 0;
|
||||||
@@ -666,7 +611,7 @@ public class LauncherStateTransitionAnimation {
|
|||||||
// Animate the all apps button
|
// Animate the all apps button
|
||||||
float finalRadius = pCb.getMaterialRevealViewStartFinalRadius();
|
float finalRadius = pCb.getMaterialRevealViewStartFinalRadius();
|
||||||
AnimatorListenerAdapter listener =
|
AnimatorListenerAdapter listener =
|
||||||
pCb.getMaterialRevealViewAnimatorListener(revealView, allAppsButtonView);
|
pCb.getMaterialRevealViewAnimatorListener(revealView, buttonView);
|
||||||
Animator reveal = UiThreadCircularReveal.createCircularReveal(revealView, width / 2,
|
Animator reveal = UiThreadCircularReveal.createCircularReveal(revealView, width / 2,
|
||||||
height / 2, revealRadius, finalRadius);
|
height / 2, revealRadius, finalRadius);
|
||||||
reveal.setInterpolator(new LogDecelerateInterpolator(100, 0));
|
reveal.setInterpolator(new LogDecelerateInterpolator(100, 0));
|
||||||
|
|||||||
Reference in New Issue
Block a user