android 自定义圆形pop,自定义通过PopupWindow实现通用菜单

会经常用户到菜单选项提供给用户选择,例如选择图片,图库和相机选择等一系列场景吧,根据为了以后更加方便使用通过自定义封装了一个菜单,主要是通过一个列表展示,将菜单项列表传入设置参数就可以显示,使用方便简单只需要几行代码就可以,可以显示在底部,居中和某个控件的下方。先看效果图吧

fe6313a728f5

居中显示

fe6313a728f5

底部显示

fe6313a728f5

置于控件下方

看过效果图接下来看一下用法

List menus =new ArrayList<>();

PopMenu popMenu=new PopMenu.MenuBuilder(activity,menus, new BaseQuickAdapter.OnItemClickListener() {

@Override

public void onItemClick(BaseQuickAdapter adapter, View view, int position) {

})//必须设置 当前activity,menus 菜单项,菜单点击事件

.focusable(true)//是否获取焦点

.outsideTouchable(true)//点击外部是否小时

.showIco(false)//是否显示菜单图标

.setElevation(true)//背景是否置灰

.hasDiver(false)//是否显示分割线

.setItemBackground(R.drawable.pop_menu_item_selector)//菜单子项背景

.show(rightImg,0,60);//置于控件下方

只需要设置需要的属性就可以显示并使用了,另外show()默认居中显示 showBottom()在底部显示

用法是不是很简单呢,接下来就要看源码了

package shens.library.base.view.menu;

import android.app.Activity;

import android.graphics.drawable.BitmapDrawable;

import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;

import android.view.Gravity;

import android.view.LayoutInflater;

import android.view.View;

import android.view.WindowManager;

import android.widget.PopupWindow;

import java.util.List;

import shens.library.base.R;

import shens.library.base.adapter.recyle.BaseQuickAdapter;

import shens.library.base.utils.ScreenUtils;

/**

* 弹出菜单

* Created by shenshilei on 2018/1/4.

* email ssl_java@163.com

* site http://www.houziyou.com

*/

public class PopMenu {

private ActivitymContext;//上下文

private ViewmPopWindowView;

private RecyclerViewmenuListView;

private PopupWindowpopupWindow;

private PopupWindow.OnDismissListenerdimisListener;

private BaseQuickAdapter.OnItemClickListeneronItemClickListener;

private MenuListAdaptermenuListAdapter;

private ListmenuModels;

private boolean isShowIco =false;

private int mWidth;

private boolean isSetElevation=true;//背景是否阴影

public PopMenu(Activity mContext, List menus){

this.mContext = mContext;

popupWindow =new PopupWindow(mContext);

this.menuModels = menus;

initView();

}

private void initView() {

mWidth= ScreenUtils.getScreemWidth(mContext)/2;

mPopWindowView = LayoutInflater.from(mContext).inflate(R.layout.pop_menu_view,null);

menuListView = (RecyclerView)mPopWindowView.findViewById(R.id.pop_menu_listview);

menuListView.setLayoutManager(new LinearLayoutManager(mContext));

menuListAdapter=new MenuListAdapter(isShowIco,LinearLayoutManager.VERTICAL ,R.layout.pop_menu_item,menuModels);

menuListAdapter.setOnItemClickListener(onItemClickListener);

popupWindow.setBackgroundDrawable(new BitmapDrawable());

popupWindow.setFocusable(true);

popupWindow.setOutsideTouchable(true);

popupWindow.setWidth(mWidth);

popupWindow.setContentView(mPopWindowView);

popupWindow.setOnDismissListener(new PopupWindow.OnDismissListener() {

@Override

public void onDismiss() {

setViewNoElevation();

if(dimisListener!=null){

dimisListener.onDismiss();

}

}

});

}

public void setOnItemClickListener(BaseQuickAdapter.OnItemClickListener onItemClickListener){

this.onItemClickListener = onItemClickListener;

menuListAdapter.setOnItemClickListener(this.onItemClickListener);

}

public void setWidth(int width){

this.mWidth = width;

}

public void setHasDiver(boolean isHasDivier){

menuListAdapter.setIsDiver(isHasDivier);

}

public void setMenuItemBackground(int resid){

menuListAdapter.setItemBackground(resid);

}

public void showCenter(){

setViewElevation();

menuListView.setAdapter(menuListAdapter);

popupWindow.setAnimationStyle(R.style.popupwindow_alph);

popupWindow.showAtLocation(mContext.getWindow().getDecorView(), Gravity.CENTER,0,0);

}

public void show(){

showCenter();

}

public void showBottom(){

setViewElevation();

menuListView.setAdapter(menuListAdapter);

popupWindow.setAnimationStyle(R.style.popupwindow_botoom);

popupWindow.showAtLocation(mContext.getWindow().getDecorView(), Gravity.BOTTOM,0,0);

}

public void setIsshowIco(boolean isshowIco){

this.isShowIco=isshowIco;

}

public void setElevation(boolean isSetElevation){

this.isSetElevation=isSetElevation;

}

private void setFocusable(boolean focusable){

popupWindow.setFocusable(focusable);

}

private void setOutSideable(boolean outSideable){

popupWindow.setOutsideTouchable(outSideable);

}

private void setViewElevation(){

//产生背景变暗效果

if(isSetElevation){

WindowManager.LayoutParams lp =mContext.getWindow().getAttributes();

lp.alpha =0.6f;

mContext.getWindow().setAttributes(lp);

}

}

private void setViewNoElevation(){

if(isSetElevation){

WindowManager.LayoutParams lp =mContext.getWindow().getAttributes();

lp.alpha =1.0f;

mContext.getWindow().setAttributes(lp);

}

}

public void show(View view){

setViewElevation();

menuListView.setAdapter(menuListAdapter);

popupWindow.showAsDropDown(view);

}

public void show(View view,int x,int y){

setViewElevation();

menuListView.setAdapter(menuListAdapter);

popupWindow.showAsDropDown(view,x,y);

}

public void dismis(){

if(popupWindow!=null)

popupWindow.dismiss();

}

public MenuListAdaptergetAdapter(){

return menuListAdapter;

}

public void setOndismisListener(PopupWindow.OnDismissListener dimisListener){

this.dimisListener =dimisListener;

}

public static class MenuBuilder{

private Activityactivity;

Listmenus;

private PopupWindow.OnDismissListenerdimisListener;

private BaseQuickAdapter.OnItemClickListeneronItemClickListener;

private boolean isShowIco =false;//是否显示图标

private boolean isHasDiver=false;//是否显示分割线

private int itemBackResId;

private int mWidth;

private boolean isSetElevation=true;

private boolean isFocused =true;

private boolean isOutSideTouchable =true;

public MenuBuilder(Activity activity,List menus,BaseQuickAdapter.OnItemClickListener onItemClickListener){

this.activity =activity;

this.menus = menus;

this.onItemClickListener = onItemClickListener;

mWidth= ScreenUtils.getScreemWidth(activity)/2;//默认宽度为屏幕的一半

itemBackResId=R.drawable.pop_menu_item_selector;

}

public MenuBuilderdimisListener(PopupWindow.OnDismissListener dimisListener){

this.dimisListener = dimisListener;

return this;

}

public MenuBuildersetItemBackground(int resid){

this.itemBackResId = resid;

return this;

}

public MenuBuildershowIco(boolean isShowIco){

this.isShowIco = isShowIco;

return this;

}

public MenuBuilderhasDiver(boolean isHasDiver){

this.isHasDiver = isHasDiver;

return this;

}

public MenuBuilderfocusable(boolean isFocused){

this.isFocused = isFocused;

return this;

}

public MenuBuilderoutsideTouchable(boolean isOutSideTouchable){

this.isOutSideTouchable = isOutSideTouchable;

return this;

}

public MenuBuildersetElevation(boolean isSetElevation){

this.isSetElevation = isSetElevation;

return this;

}

public MenuBuilderwidth(int mWidth){

this.mWidth = mWidth;

return this;

}

public PopMenucreate(){

PopMenu popMenu =new PopMenu(activity,menus);

popMenu.setWidth(mWidth);

popMenu.setHasDiver(true);

popMenu.setIsshowIco(isShowIco);

popMenu.setElevation(isSetElevation);

popMenu.setFocusable(isFocused);

popMenu.setHasDiver(isHasDiver);

popMenu.setOutSideable(isOutSideTouchable);

popMenu.setMenuItemBackground(itemBackResId);

popMenu.setOndismisListener(dimisListener);

popMenu.setOnItemClickListener(onItemClickListener);

return popMenu;

}

public PopMenushow(){

PopMenu popMenu = create();

popMenu.show();

return  popMenu;

}

public PopMenushowBottom(){

PopMenu popMenu = create();

popMenu.showBottom();

return  popMenu;

}

public PopMenushow(View view,int x,int y){

PopMenu popMenu = create();

popMenu.show(view,x,y);

return  popMenu;

}

}

}

以上就是菜单的核心代码了,需要详细或者是有疑问可以评论留言沟通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值