PopupWindow仿微信浮层弹出框效果

最近公司项目需要实现类似微信的浮层弹出框。研究发现是用PopupWindow实现的。而且可以自定义位置以及出现和退出时的动画,由于太晚了就不实现动画了,需要得同学请自己研究下。由于本人新手其中的不足和缺点请见谅。

代码如下:

首先是定义顶部按钮的main.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:id="@+id/main"
 android:orientation="vertical"
 tools:context=".MainActivity"
 android:background="@color/white" > 

 <RelativeLayout
 android:id="@+id/rl_action_bar"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_gravity="center"
 android:padding="10dip"
 android:background="@color/gold" > 

 <Button
  android:id="@+id/more"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentRight="true"
  android:layout_marginRight="10dip"
  android:background="@drawable/more" />
 <Button
  android:id="@+id/add"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginRight="20dip"
  android:layout_toLeftOf="@+id/more"
  android:background="@drawable/add"
  />
 <Button
  android:id="@+id/search"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginRight="20dip"
  android:layout_toLeftOf="@+id/add"
  android:background="@drawable/search"
  />
 </RelativeLayout> 

</LinearLayout>

其次是定义弹出框PopupWindow的popupwindow_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@drawable/click"
 android:cacheColorHint="#00000000"
 android:orientation="vertical" >
 <ListView
 android:id="@+id/lv_dialog"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:cacheColorHint="#00000000"
 android:listSelector="@drawable/grouplist_item_bg_normal" >
 </ListView> 

</LinearLayout>

接着是每一个弹出框显示的文字text.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="vertical" > 

 <TextView
 android:id="@+id/tv_text"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_marginLeft="10dip"
 android:padding="5dp"
 android:textSize="20sp" /> 

</LinearLayout>

最后是主界面的MainActivity.java

package com.bn.weixindemo; 

import android.app.Activity;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener; 

/**
 *
 *@title 标题
 *@description 仿微信顶部弹出框的popuwindow
 *@author zhengxiaolin
 *@version 1.0
 *@created 2014-5-23 上午12:11:11
 *@changeRecord [修改记录]<br />
 */
public class MainActivity extends Activity implements OnClickListener{
 private Button mBtnMore,mBtnAdd,mBtnSearch;
 private PopupWindow popupWindow;
 private LinearLayout layout;
 private ListView listView;
 private String[] more = {"我的相册","我的收藏","我的银行卡","设置","意见反馈"};
 private String[] add ={"发起群聊","添加朋友","视屏聊天","扫一扫","拍照分享"};
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 mBtnMore = (Button) findViewById(R.id.more);
 mBtnAdd = (Button) findViewById(R.id.add);
 mBtnSearch = (Button) findViewById(R.id.search);
 setOnClickListener();
 } 

 private void setOnClickListener() {
 mBtnMore.setOnClickListener(this);
 mBtnAdd.setOnClickListener(this);
 mBtnSearch.setOnClickListener(this);
 } 

 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 switch (v.getId()) {
 case R.id.more:
  mBtnMore.getTop();
  int y = mBtnMore.getBottom() * 3 / 2;
  int x = getWindowManager().getDefaultDisplay().getWidth();
  showMorePopupWindow(x, y);
  break;
 case R.id.add:
  mBtnAdd.getTop();
  int y1 = mBtnAdd.getBottom() * 3 / 2;
  int x1 = getWindowManager().getDefaultDisplay().getWidth();
  showAddPopupWindow(x1, y1);
  break;
 case R.id.search:
  Toast.makeText(getBaseContext(), "搜索", 1).show();
 default:
  break;
 }
 } 

 public void showMorePopupWindow(int x, int y) {
 layout = (LinearLayout) LayoutInflater.from(MainActivity.this).inflate(
  R.layout.popupwindow_dialog, null);
 listView = (ListView) layout.findViewById(R.id.lv_dialog);
 listView.setAdapter(new ArrayAdapter<String>(MainActivity.this,
  R.layout.text, R.id.tv_text, more)); 

 popupWindow = new PopupWindow(MainActivity.this);
 popupWindow.setBackgroundDrawable(new BitmapDrawable());
 popupWindow
  .setWidth(getWindowManager().getDefaultDisplay().getWidth() / 2);
 popupWindow.setHeight(420);
 popupWindow.setOutsideTouchable(true);
 popupWindow.setFocusable(true);
 popupWindow.setContentView(layout);
 popupWindow.showAtLocation(findViewById(R.id.main), Gravity.LEFT
  | Gravity.TOP, x, y);//需要指定Gravity,默认情况是center.
 listView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
   long arg3) {
  Toast.makeText(getBaseContext(), "您选择了:"+more[arg2], 1).show();
  popupWindow.dismiss();
  popupWindow = null;
  }
 });
 }
 /**
 * 点击+时弹出的popuwindow
 */
 public void showAddPopupWindow(int x, int y) {
 layout = (LinearLayout) LayoutInflater.from(MainActivity.this).inflate(
  R.layout.popupwindow_dialog, null);
 listView = (ListView) layout.findViewById(R.id.lv_dialog);
 listView.setAdapter(new ArrayAdapter<String>(MainActivity.this,
  R.layout.text, R.id.tv_text, add)); 

 popupWindow = new PopupWindow(MainActivity.this);
 popupWindow.setBackgroundDrawable(new BitmapDrawable());
 popupWindow
  .setWidth(getWindowManager().getDefaultDisplay().getWidth() / 2);
 popupWindow.setHeight(420);
 popupWindow.setOutsideTouchable(true);
 popupWindow.setFocusable(true);
 popupWindow.setContentView(layout);
 popupWindow.showAtLocation(findViewById(R.id.main), Gravity.LEFT
  | Gravity.TOP, x, y);//需要指定Gravity,默认情况是center.
 listView.setOnItemClickListener(new OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
   long arg3) {
  Toast.makeText(getBaseContext(), "您选择了:"+add[arg2], 1).show();
  popupWindow.dismiss();
  popupWindow = null;
  }
 });
 }
}

好了,主要代码就完成了,实现效果如下所示

由于本人没有图片,所以弹出框的背景图没有处理,弹出框中的每一项的前面也没有添加图片,有需要得同学可以自行添加。(效果已经出来了,细节没有调整,请大家见谅)

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

您可能感兴趣的文章:

  • Android实现底部半透明弹出框PopUpWindow效果
  • Android中自定义PopupWindow实现弹出框并带有动画效果
  • Android实现可输入数据的弹出框
  • Android 多种简单的弹出框样式设置代码
  • Android使用Dialog风格弹出框的Activity
  • react-native 封装选择弹出框示例(试用ios&android)
  • Android 仿微信朋友圈点赞和评论弹出框功能
  • 高仿IOS的Android弹出框
  • Android仿微信进度弹出框的实现方法
(0)

相关推荐

  • Android 仿微信朋友圈点赞和评论弹出框功能

    贡献/下载源码:https://github.com/mmlovesyy/PopupWindowDemo 本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框.发评论,及弹出位置的控制. 1. 微信弹出框 微信朋友圈的点赞和评论功能,有2个组成部分: 点击左下角的"更多"按钮,弹出对话框: 点击评论,弹出输入框,添加评论并在页面中实时显示: 微信朋友圈点赞和评论功能 2. 实际效果 本文将建一个 ListView,在其 Item 中简单模仿微信的布局,然后着重实现

  • react-native 封装选择弹出框示例(试用ios&android)

    在开发 App 的时候,经常会使用到对话框(又叫消息框.提示框.告警框). 在web开发中经常会用得到.今天就来介绍了一下react-native 封装弹出框 之前看到react-native-image-picker中自带了一个选择器,可以选择拍照还是图库,但我们的项目中有多处用到这个选择弹出框,所以就自己写了一下,最最重要的是ios和Android通用.先上动态效果图~ 一.封装要点 1.使用动画实现弹框布局及显示隐藏效果 2.通过一个boolean值控制组件的显示隐藏 3.弹框选项数组通过

  • Android中自定义PopupWindow实现弹出框并带有动画效果

    使用PopupWindow来实现弹出框,并且带有动画效果 首先自定义PopupWindow public class LostPopupWindow extends PopupWindow { public Lost lost; public void onLost(Lost lost){ this.lost = lost; } private View conentView; public View getConentView() { return conentView; } public L

  • Android 多种简单的弹出框样式设置代码

    简介 这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式,其中提供各种简单样式的弹出框使用说明.同时也可自定义弹出框. 项目地址:http://www.github.com/jjdxmashl/jjdxm_dialogui 特性 1.使用链式开发代码简洁明了 2.所有的弹出框样式都在DialogUIUtils这个类中完成,方便查阅方法 3.可以自定义弹出框字体样式 4.简单的类似加载框的样式可以支持两种主题更改默认白色和灰色 截图 demo下载 demo apk下载 D

  • 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实现可输入数据的弹出框

    之前一篇文章,介绍了如何定义从屏幕底部弹出PopupWindow即<Android Animation实战之屏幕底部弹出PopupWindow>,写完之后,突然想起之前写过自定义内容显示的弹出框,就随手写了两个实例,分享出来: 第一种实现方式:继承Dialog  1.1 线定义弹出框要显示的内容:create_user_dialog.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

  • Android实现底部半透明弹出框PopUpWindow效果

    Android底部半透明弹出框PopUpWindow,供大家参考,具体内容如下 layout布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" androi

  • 高仿IOS的Android弹出框

    先看一下效果图,不过这是网上的图片. 效果不错,就借此拿来与大伙分享分享. github源码地址:https://github.com/saiwu-bigkoo/Android-AlertView. 1.怎么用:添加依赖. compile 'com.bigkoo:alertview:1.0.3' 2.实例demo(大家可以根据需要来选择自己需要的框框). package com.example.my.androidalertview; import android.app.Activity; i

  • Android使用Dialog风格弹出框的Activity

    在Android中经常会遇到需要使用Dialog风格弹出框的activity,首先我们可能会首先想到的是在XML布局文件中设置android:layout_height="wrap_content"属性,让activity的高度自适应,显然这还不行,我们还需要为其DialogActivity设置自定义一个样式 <style name="dialogstyle"> <!--设置dialog的背景--> <item name="a

  • PopupWindow仿微信浮层弹出框效果

    最近公司项目需要实现类似微信的浮层弹出框.研究发现是用PopupWindow实现的.而且可以自定义位置以及出现和退出时的动画,由于太晚了就不实现动画了,需要得同学请自己研究下.由于本人新手其中的不足和缺点请见谅. 代码如下: 首先是定义顶部按钮的main.xml文件 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.an

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

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

  • Android编程实现仿易信精美弹出框效果【附demo源码下载】

    本文实例讲述了Android编程实现仿易信精美弹出框效果.分享给大家供大家参考,具体如下: 截图: 动画效果介绍: 1.点击ActionBar上"+"按钮,菜单从上方弹出(带反弹效果): 2.再次点击"+".点击空白区域或者点击返回键,菜单向上方收起: 3.点击弹出框上的按钮时,该按钮放大,其它按钮缩小,菜单整体渐变退出. 主体代码: 1.Activity. /** * 仿易信动画弹出框 */ public class MainActivity extends Ac

  • Android编程实现仿QQ发表说说,上传照片及弹出框效果【附demo源码下载】

    本文实例讲述了Android编程实现仿QQ发表说说,上传照片及弹出框效果.分享给大家供大家参考,具体如下: 代码很简单,主要就是几个动画而已,图标什么的就随便找了几个,效果图:   动画说明: 1.点击右上角按钮,菜单从顶部下拉弹出,同时背景变暗; 2.再次点击右上角按钮,点击返回键,或者点击空白区域(也就是变暗的部分),菜单向上收回; 3.点击菜单上的按钮响应事件,同时菜单收回(效果同2) 重要说明:动画结束后必须clearAnimation,否则隐藏状态的view依然能响应点击事件 主体代码

  • IOS开发仿微信右侧弹出视图实现

    IOS开发仿微信右侧弹出视图实现 微信首页的+号,点击之后会弹出一个更多的视图,这个视图如何实现呢? 实现该效果可能需要以下技术要点: 1.图片拉伸,通过拉伸图片的中间的较小区域来保持图片的边上的形状 2.仿射变换,用到仿射变换的缩放,平移和合并,视图动画 3.navigationBar的样式设置 实现效果,如下: 本Demo图片来源微信安装包解压得到的图片 实现代码: // // ViewController.m // appXX-微信更多工具栏 // // Created by MRBean

  • 基于JavaScript实现弹出框效果

    弹出框在网站页面中是必不可少的一部分,今天借助我们平台给大家分享使用js实现简单的弹出框效果,本文写不好,还请见谅! 首先我们来分析弹出框的部件.简单弹出框分为头,内容,尾部. 头部中有标题和关闭按钮,内容就可以图文,媒体,iframe,flash等等,尾部就是按钮(确认,取消等等),这个例子尾部我就不加入按钮了,这个例子主要是实现弹出框的核心部分. <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q

  • 微信浏览器弹出框滑动时页面跟着滑动的实现代码(兼容Android和IOS端)

    在做微信开发的时候遇到这个问题:微信浏览器弹出框滑动时页面跟着滑动. 我觉得这个问题用的是下面这几行代码: var $body = $('body'), dialogIsInView = !1,//当前是不是对话框 lastContentContainerScrollTop = -1,//用于弹出框禁止内容滚动 $contentContainer = $('#content-container');//内容容器 //阻止Window滚动 function stopWindowScroll() {

  • Android实现蒙版弹出框效果

    本文实例为大家分享了Android蒙版弹出框效果的具体代码,供大家参考,具体内容如下 自定义 package cn.lxsdb.yyd.app.dialog; import cn.lxsdb.yyd.app.R; import cn.lxsdb.yyd.app.constants.AppIntent; import android.app.Dialog; import android.content.Context; import android.content.Intent; import a

  • 小程序自定义弹出框效果

    本文实例为大家分享了小程序自定义弹出框效果的具体代码,供大家参考,具体内容如下 my-pop----api: title ------字符串---------自定义弹窗标题context ------字符串---------自定义弹窗内容cancelTxt ------字符串---------取消按钮文本cancelCor ------字符串---------取消按钮颜色inp ------布尔值---------true文本弹出框---------fasle默认弹出框okTxt ------字

随机推荐