微信右上角的 *** 作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下。
不知道微信是用什么实现的,我使用popupwindow来实现,主要分为几块内容:
1、窗口布局文件:popwin_share.xml
<?xml version="1.0" enCoding="utf-8"?> <linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:background="@drawable/Title_tools_bg" androID:orIEntation="vertical" > <linearLayout androID:ID="@+ID/layout_share" androID:orIEntation="horizontal" androID:background="@drawable/menu_left_item_selector" androID:padding="5dp"> <ImageVIEw androID:layout_marginleft="7dp" androID:scaleType="fitCenter" androID:src="@drawable/share" /> <TextVIEw androID:textcolor="@color/white" androID:textSize="@dimen/text18" androID:layout_marginleft="5dp" androID:text="分享内容" /> </linearLayout> <linearLayout androID:ID="@+ID/layout_copy" androID:orIEntation="horizontal" androID:background="@drawable/menu_left_item_selector" androID:padding="5dp"> <ImageVIEw androID:layout_marginleft="5dp" androID:scaleType="fitCenter" androID:src="@drawable/copy_pressed" /> <TextVIEw androID:textcolor="@color/white" androID:textSize="@dimen/text18" androID:layout_marginleft="5dp" androID:text="复制结果" /> </linearLayout> </linearLayout>
采用线性布局,因为里面是一行一行竖排的菜单,线性布局更容易控制。大布局里面放了两个垂直排列的线性布局,每个线性布局中分别有横向排列的imagevIEw和textvIEw,很简单的布局。大布局的背景用了一个图片,当然也可以自定义一些其他颜色。
2、popupwindow代码,我这里是自定义一个popupwindows类,继承自PopupWindow:
package com.xjw.vIEw; import com.xjw.translate.R; import androID.app.Activity; import androID.graphics.drawable.colorDrawable; import androID.vIEw.LayoutInflater; import androID.vIEw.VIEw; import androID.Widget.AdapterVIEw; import androID.Widget.BaseAdapter; import androID.Widget.linearLayout; import androID.Widget.ListVIEw; import androID.Widget.PopupWindow; /** * 项目名称:translate * 实现功能: 翻译详情界面,分享d出窗口 * 类名称:PopWinShare * 类描述:(该类的主要功能) * 创建人:徐纪伟 * E-mail: xujiwei558@126.com * 创建时间:2014年10月18日 下午4:37:25 * @version */ public class PopWinShare extends PopupWindow{ private VIEw mainVIEw; private linearLayout layoutShare,layoutcopy; public PopWinShare(Activity paramActivity,VIEw.OnClickListener paramOnClickListener,int paramInt1,int paramInt2){ super(paramActivity); //窗口布局 mainVIEw = LayoutInflater.from(paramActivity).inflate(R.layout.popwin_share,null); //分享布局 layoutShare = ((linearLayout)mainVIEw.findVIEwByID(R.ID.layout_share)); //复制布局 layoutcopy = (linearLayout)mainVIEw.findVIEwByID(R.ID.layout_copy); //设置每个子布局的事件监听器 if (paramOnClickListener != null){ layoutShare.setonClickListener(paramOnClickListener); layoutcopy.setonClickListener(paramOnClickListener); } setContentVIEw(mainVIEw); //设置宽度 setWIDth(paramInt1); //设置高度 setHeight(paramInt2); //设置显示隐藏动画 setAnimationStyle(R.style.AnimTools); //设置背景透明 setBackgroundDrawable(new colorDrawable(0)); } }
里面提供了一个构造方法,包含四个参数,第一个参数是上下文的activity,第二个是菜单的点击事件,从外边传递进来的,要绑定给每一行的菜单,具体的事件实现当然要写在activity中,后面两个分别是d出窗口的宽度和高度。里面还包含了一个动画样式,窗口打开和关闭时出现动画的样式。
3、动画样式,显示动画,缩放动画:push_in.xml
<?xml version="1.0" enCoding="utf-8"?> <scale xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:interpolator="@androID:anim/accelerate_decelerate_interpolator" androID:fromXScale="1.0" androID:toXScale="1.0" androID:fromYScale="0" androID:toYScale="1.0" androID:pivotX="0" androID:pivotY="10%" androID:duration="200" />
关闭动画,也是缩放动画:push_out.xml
<?xml version="1.0" enCoding="utf-8"?> <scale xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:interpolator="@androID:anim/accelerate_decelerate_interpolator" androID:fromXScale="1.0" androID:toXScale="1.0" androID:fromYScale="1.0" androID:toYScale="0" androID:pivotX="0" androID:pivotY="10%" androID:duration="200" />
style样式定义:
<style name="AnimTools" parent="@androID:style/Animation"> <item name="androID:windowEnteranimation">@anim/push_in</item> <item name="androID:windowExitAnimation">@anim/push_out</item> </style>
到此为止我们的自定义窗口已经定义好了。接下来看使用。
if (popWinShare == null) { //自定义的单击事件 OnClicklintener paramOnClickListener = new OnClicklintener(); popWinShare = new PopWinShare(TranslateDataContentActivity.this,paramOnClickListener,displayUtil.dip2px(context,160),160)); //监听窗口的焦点事件,点击窗口外面则取消显示 popWinShare.getContentVIEw().setonFocuschangelistener(new VIEw.OnFocuschangelistener() { @OverrIDe public voID onFocusChange(VIEw v,boolean hasFocus) { if (!hasFocus) { popWinShare.dismiss(); } } }); } //设置默认获取焦点 popWinShare.setFocusable(true); //以某个控件的x和y的偏移量位置开始显示窗口 popWinShare.showAsDropDown(btnTools,0); //如果窗口存在,则更新 popWinShare.update();
每个子菜单的单击事件自定义内部类,在里面就可以写每个子菜单的单击事件啦,
class OnClicklintener implements OnClickListener{ @OverrIDe public voID onClick(VIEw v) { switch (v.getID()) { case R.ID.layout_share: break; case R.ID.layout_copy: break; default: break; } } }
效果预览:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
总结以上是内存溢出为你收集整理的android自定义popupwindow仿微信右上角d出菜单效果全部内容,希望文章能够帮你解决android自定义popupwindow仿微信右上角d出菜单效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)