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

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

不知道微信是用什么实现的,我使用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"
    style="@style/fill_width"
    android:orientation="horizontal"
    android:background="@drawable/menu_left_item_selector"
    android:padding="5dp"> 

    <ImageView
      android:layout_marginLeft="7dp"
      style="@style/wrap"
      android:scaleType="fitCenter"
      android:src="@drawable/share" /> 

    <TextView
      style="@style/wrap"
      android:textColor="@color/white"
      android:textSize="@dimen/text18"
      android:layout_marginLeft="5dp"
      android:text="分享内容" />
  </LinearLayout> 

  <LinearLayout
    android:id="@+id/layout_copy"
    style="@style/fill_width"
    android:orientation="horizontal"
    android:background="@drawable/menu_left_item_selector"
    android:padding="5dp"> 

    <ImageView
      android:layout_marginLeft="5dp"
      style="@style/wrap"
      android:scaleType="fitCenter"
      android:src="@drawable/copy_pressed" /> 

    <TextView
      style="@style/wrap"
      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
 * 实现功能: 翻译详情界面,分享弹出窗口
 * 类名称: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中,后面两个分别是弹出窗口的宽度和高度。里面还包含了一个动画样式,窗口打开和关闭时出现动画的样式。

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), DisplayUtil.dip2px(context, 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, 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;
      } 

    } 

  } 

效果预览:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索popupwindow弹出菜单
popupwindow 右上角、自定义popupwindow、自定义popupwindow类、popupwindow的自定义、popupwindow,以便于您获取更多的相关知识。

时间: 2024-09-12 14:39:24

android自定义popupwindow仿微信右上角弹出菜单效果_Android的相关文章

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

微信右上角的操作菜单看起来很好用,就照着仿了一下,不过是旧版微信的,手里刚好有一些旧版微信的资源图标,给大家分享一下. 不知道微信是用什么实现的,我使用popupwindow来实现,主要分为几块内容: 1.窗口布局文件:popwin_share.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com

Android自定义PopupWindow仿点击弹出分享功能

本文实例自定义PopupWindow,点击弹出PopupWindow,背景变暗,仿点击弹出分享功能,供大家参考,具体内容如下 注:参照大神代码写的 自定义代码 package com.duanlian.popupwindowdemo; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.Lay

Android开发Popwindow仿微信右上角下拉菜单实例代码_Android

先给大家看下效果图: MenuPopwindow: package com.cloudeye.android.cloudeye.view; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import an

Android开发Popwindow仿微信右上角下拉菜单实例代码

先给大家看下效果图: MenuPopwindow: package com.cloudeye.android.cloudeye.view; import android.app.Activity; import android.content.Context; import android.graphics.drawable.ColorDrawable; import android.view.LayoutInflater; import android.view.View; import an

简单实现Android弹出菜单效果_Android

本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下 功能描述:用户单击按钮弹出菜单.当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失:如果用户在菜单外单击,则直接消失弹出的菜单.当菜单消失时,会引发DismissEvent事件(利用此事件可在菜单消失时做一些后续处理). 1.运行效果   2.添加菜单项 在Resources文件夹下添加一个menu子文件夹,然后在此子文件夹下添加一个名为demo07_popup_menu.xml的文件:

Android实现类似于PC中的右键弹出菜单效果_Android

 Android系统中的ContextMenu(上下文菜单)类似于PC中的右键弹出菜单,当一个视图注册到一个上下文菜单时,执行一个在该对象上的"长按"动作,将出现一个提供相关功能的浮动菜单.上下文菜单可以被注册到任何视图对象中,不过,最常见的是用于列表视图ListView的item,在按中列表项时,会转换其背景色而提示将呈现上下文菜单. 注意:上下文菜单不支持图标和快捷键. 为了创建一个上下文菜单,你必须重写这个活动的上下文菜单回调函数:onCreateContextMenu() 和

Android仿微信进度弹出框的实现方法

MainActivity: package com.ruru.dialogproject; import android.app.Activity; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity implements Runnable { LoadingDialog dialog; @Override protected void onCreate(Bu

Android使用Activity实现从底部弹出菜单或窗口的方法

本文实例讲述了Android使用Activity实现从底部弹出菜单或窗口的方法.分享给大家供大家参考,具体如下: 这里使用activity实现弹出滑动窗口或菜单,主要是使用了一些设置activity的样式来实现弹出窗口和滑动效果,实现如下: 第一步:设计要弹出窗口的xml布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://sche

简单实现Android弹出菜单效果

本文实例为大家分享了Android弹出菜单效果的具体代码,供大家参考,具体内容如下 功能描述:用户单击按钮弹出菜单.当用户选择一个菜单项,会触发MenuItemClick事件并让弹出的菜单消失:如果用户在菜单外单击,则直接消失弹出的菜单.当菜单消失时,会引发DismissEvent事件(利用此事件可在菜单消失时做一些后续处理). 1.运行效果 2.添加菜单项 在Resources文件夹下添加一个menu子文件夹,然后在此子文件夹下添加一个名为demo07_popup_menu.xml的文件: <