android自定义popupwindow仿微信右上角d出菜单效果

android自定义popupwindow仿微信右上角d出菜单效果,第1张

概述微信右上角的 *** 作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下。

微信右上角的 *** 作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下。

不知道微信是用什么实现的,我使用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出菜单效果所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147580.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存