Android仿今日头条APP实现下拉导航选择菜单效果

2019-12-10 17:54:35王旭

菜单项使用GridView实现,我们还需要设置每个菜单项的监听事件,在选中一项菜单后或是点击返回键或点击菜单键时实现隐藏,代码如下:

 /**
 * 设置菜单项监听事件
 * @param gridView
 */
 private void setMenuListener(GridView gridView){
 if (null == gridView.getOnItemClickListener()){
  gridView.setOnItemClickListener(new OnItemClickListener(){
  @Override
  public void onItemClick(
   AdapterView<?> parent, 
   View view,
   int position, 
   long id){
   if (null != menuItemListener){
   menuItemListener.onMenuItemClick(parent, view, position);
   }
   
   hide();
  }
  });
 }
 
 // 按返回键或菜单键隐藏菜单
 gridView.setOnKeyListener(new OnKeyListener(){
  @Override
  public boolean onKey(View v, int keyCode, KeyEvent event){
  if (event.getAction() == KeyEvent.ACTION_DOWN){
   switch (keyCode){
   case KeyEvent.KEYCODE_BACK:
   case KeyEvent.KEYCODE_MENU:
   hide();
   break;
   }
  }
  
  return false;
  }
 });
 }

在PulldownMenuView类中的show()和hide()方法中,主要是实现菜单的显示与隐藏。在show()方法中,要计算每行存放的菜单数、设置相应的高度、菜单整体的背景、动画效果、菜单显示的位置等效果。具体不再详述。
我们在显示下拉导航选择菜单前还需要配置菜单相应的参数,比如显示位置、背景图片、高度等。这就是在MenuUtility类中要实现的,代码如下:

package com.navigation.utility;

import com.navigation.acitvity.R;
import com.navigation.control.PulldownMenuView;

import android.content.Context;
import android.view.View;

/**
 * PulldownMenuView基本操作类
 * @Description: PulldownMenuView基本操作类

 * @File: PulldownMenuUtility.java

 * @Package com.navigation.utility

 * @Author Hanyonglu

 * @Date 2012-7-30 上午11:41:04

 * @Version V1.0
 */
public class MenuUtility {
 private Context context = null;
 // PulldownMenuView对象
 private PulldownMenuView menu = null;
 // 图片资源
 private int[] imageRes = null;
 // 文字内容
 private String[] texts = null;
 // 菜单高度
 private int height = 0;
 private View anchorView = null;
 
 /**
 * 默认的构造器
 */
 public MenuUtility() {
 // TODO Auto-generated constructor stub
 }
 
 /**
 * 带Context的构造器
 * @param context
 */
 public MenuUtility(Context context) {
 // TODO Auto-generated constructor stub
 this(context,null,null,0,null);
 }
 
 /**
 * 带多参的构造器
 * @param context
 * @param imageRes
 * @param texts
 */
 public MenuUtility(Context context,int[] imageRes,String[] texts,int height,View anchorView){
 this.context = context;
 this.imageRes = imageRes;
 this.texts = texts;
 this.height = height;
 this.anchorView = anchorView;
 }
 
 /**
 * 设置图片资源
 * @param imageRes
 */
 public void setImageRes(int[] imageRes){
 this.imageRes = imageRes;
 }
 
 /**
 * 设置文字内容
 * @param texts
 */
 public void setTexts(String[] texts){
 this.texts = texts;
 }
 
 /**
 * 设置高度
 * @param height
 */
 public void setHeight(int height){
 this.height = height;
 }
 
 /**
 * 设置显示的位置
 * @param anchor
 */
 public void setAnchorView(View anchor){
 anchorView = anchor;
 }
 
 /**
 * 获取PulldownMenuView对象
 * 以下拉的形式展现出来菜单
 * @return
 */
 public PulldownMenuView getPulldownMenuView(String currentItem){
 PulldownMenuView menu = new PulldownMenuView(context);
 menu.setImageRes(imageRes);
 menu.setMenuText(texts);
 menu.setHeight(height);
 menu.setAnchorView(anchorView);
 menu.setCurrentItem(currentItem);
 menu.setBackground(R.drawable.navigation_bg);
 
 return menu;
 }
 
 /**
 * 获取PulldownMenuView对象
 * 以向上弹出的方式展现出来菜单
 * @return
 */
 public PulldownMenuView getPopupMenuView(){
 PulldownMenuView menu = new PulldownMenuView(context);
 menu.setImageRes(imageRes);
 menu.setMenuText(texts);
 // menu.setLocation(Gravity.BOTTOM | Gravity.CENTER);
 menu.setAnimStyle(R.style.pulldown_in_out);
 menu.setBackground(R.drawable.navigation_bg);
 
 return menu;
 }
}