当我按下操作栏中的溢出菜单时,下拉菜单会弹出一个动画。我正在检查sdk的res / anim文件夹,我想知道这个按钮使用哪个动画,所以当用户按下操作栏中的其他按钮时,我可以用它来弹出其他一些东西。
谢谢!
答案 0 :(得分:0)
据我所知,在Android Api 23上,默认的下拉动画是由Transition实现的。您可以阅读PopupWindow.java的源代码以了解已完成的操作以及如何执行。
您可以在sdk的platform / android-23 / datas / res / transition目录中找到两个用于定义下拉动画转换的xml文件。(popup_window_enter.xml,popup_window_exit.xml) 不幸的是,您无法通过android.R.transition.popup_window_enter.xml引用它,因为它是隐藏的。但是您可以将其复制到您的项目中并使用它。
下面有一些我在项目中使用的代码。
public static void showOverflow(final RelativeLayout holder, final View anchor, final CardView cv) {
holder.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hideOverflow(holder, cv);
}
});
if (cv.getVisibility() != View.VISIBLE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
try {
final Rect episodeCenter = getTransitionEpicenter(anchor, cv);
Transition transition = TransitionInflater.from(holder.getContext()).inflateTransition(R.transition.popup_window_enter);
transition.setEpicenterCallback(new Transition.EpicenterCallback() {
@Override
public Rect onGetEpicenter(Transition transition) {
return episodeCenter;
}
});
TransitionManager.beginDelayedTransition(cv, transition);
} catch (Exception e) {
e.printStackTrace();
}
}
cv.setVisibility(View.VISIBLE);
}
}
private static Rect getTransitionEpicenter(View anchor, View popup) {
final int[] anchorLocation = new int[2];
final int[] popupLocation = new int[2];
anchor.getLocationOnScreen(anchorLocation);
popup.getLocationOnScreen(popupLocation);
final Rect bounds = new Rect(0, 0, anchor.getWidth(), anchor.getHeight());
bounds.offset(anchorLocation[0] - popupLocation[0], anchorLocation[1] - popupLocation[1]);
return bounds;
}