要以一种非常奇怪的方式显示Android菜单项,可以使用属性动画来实现。下面是一个示例代码:
首先,在你的布局文件中添加一个按钮:
然后,在你的Activity中添加以下代码:
import android.animation.Animator;
import android.animation.ValueAnimator;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.PopupMenu;
public class MainActivity extends AppCompatActivity {
private ViewGroup menuContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
menuContainer = findViewById(R.id.menu_container);
Button btnMenu = findViewById(R.id.btn_menu);
btnMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showMenu();
}
});
}
private void showMenu() {
// 创建一个PopupMenu对象
PopupMenu popupMenu = new PopupMenu(this, menuContainer);
// 添加菜单项
Menu menu = popupMenu.getMenu();
menu.add(Menu.NONE, Menu.FIRST, Menu.NONE, "菜单项1");
menu.add(Menu.NONE, Menu.FIRST + 1, Menu.NONE, "菜单项2");
menu.add(Menu.NONE, Menu.FIRST + 2, Menu.NONE, "菜单项3");
// 设置PopupMenu的显示动画
ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
animator.setDuration(1000);
animator.setInterpolator(new AccelerateDecelerateInterpolator());
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float value = (float) animation.getAnimatedValue();
menuContainer.setScaleX(value);
menuContainer.setScaleY(value);
menuContainer.setAlpha(value);
}
});
animator.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
menuContainer.setVisibility(View.VISIBLE);
}
@Override
public void onAnimationEnd(Animator animation) {
// 这里可以添加菜单项点击的处理逻辑
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
animator.start();
// 显示PopupMenu
popupMenu.show();
}
}
在上面的代码中,我们首先创建一个PopupMenu对象,并添加菜单项。然后,我们使用属性动画来实现菜单项的非常奇怪的显示方式。在动画开始时,我们将菜单项的缩放和透明度设置为0,然后通过属性动画逐渐将其恢复为默认值。在动画结束时,我们可以添加菜单项点击的处理逻辑。
最后,在你的布局文件中添加一个容器来显示菜单项:
你可以根据你的需求来调整动画的效果和菜单项的布局。