`
men4661273
  • 浏览: 278562 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

android自定义popupwindow仿微信

 
阅读更多

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

      不知道微信是用什么实现的,我使用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;
			}
			
		}
		
	}

     效果预览:

     



 
 
   
    部分图像资源


 

 

 



 

  • 大小: 9.1 KB
6
0
分享到:
评论
2 楼 men4661273 2017-03-05  
小白马 写道
能不能发一下源代码啊

https://git.oschina.net/xujiwei/translate
1 楼 小白马 2016-08-01  
能不能发一下源代码啊

相关推荐

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

    2. **自定义PopupWindow类**:通常我们会创建一个继承自`PopupWindow`的类,以便封装一些通用功能。例如,可以添加初始化布局、设置大小、背景、动画等功能。在提供的代码片段中,可以看到一个自定义的`PopupWindow`...

    仿微信右上角弹出PopupWindow

    综上所述,通过结合`PopupWindow`、自定义布局、屏幕坐标计算以及动画效果,我们可以实现一个类似微信右上角弹出的功能。在`TestPop`这个示例项目中,你可以找到具体的代码实现和实际运行效果。这个Demo不仅展示了...

    安卓Android源码——仿微信popupwindow.zip

    "安卓Android源码——仿微信popupwindow.zip" 这个标题表明了我们即将探讨的是一个关于Android平台的源代码项目,它的主要目的是实现类似微信应用中的PopupWindow功能。PopupWindow是Android系统中一个非常重要的UI...

    PopupWindow仿微信浮层弹出框效果

    PopupWindow仿微信浮层弹出框效果是Android开发中常见的一种浮层弹出框效果,通过使用PopupWindow控件可以实现类似微信浮层弹出框的效果。下面将详细介绍PopupWindow仿微信浮层弹出框效果的实现方法。 一、...

    android自定义PopupWindow

    在Android开发中,`PopupWindow` 是一个非常...总之,自定义 `PopupWindow` 是 Android 开发中的常见需求,通过巧妙地组合布局、事件监听和动画效果,我们可以创建出丰富多样的用户交互体验,如同微信中的弹框那样。

    安卓Andriod源码——仿微信popupwindow.zip

    【安卓Android源码——仿微信popupwindow】 在安卓开发中,PopupWindow是一个非常重要的组件,它允许我们在主界面之上弹出一个窗口,用于显示额外的信息或者进行特定的操作。本资源"安卓Andriod源码——仿微信...

    Android仿微信右上角点击加号弹出PopupWindow

    二、自定义PopupWindow 要实现Android仿微信右上角点击加号弹出PopupWindow,需要自定义一个继承自PopupWindow的类。在这个类中,我们可以设置窗口的布局、宽度和高度,并且可以添加事件监听器来响应用户的交互。 ...

    高仿微信朋友圈点赞、评论弹出框效果(自定义Popupwindow实现)

    在Android应用开发中,创建一个高仿微信朋友圈点赞和评论的弹出框效果是一个常见的需求。这个Demo就是针对这一需求,通过自定义`PopupWindow`实现的。`PopupWindow`是Android系统提供的一种轻量级的弹出对话框,它...

    仿微信popup window

    在Android应用开发中,...总的来说,“仿微信popup window”的实现涉及到Android的PopupWindow类、自定义动画、布局设计以及触摸事件处理等多个方面,理解并掌握这些知识点对于提升Android应用的用户体验具有重要意义。

    Android自定义仿微信PopupWindow效果

    总的来说,Android自定义仿微信PopupWindow效果需要理解PopupWindow的基本用法,并结合自定义视图和事件处理来实现特定的交互效果。通过这种方式,开发者可以为用户提供更加丰富、个性化的操作体验。在学习和实践中...

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

    `Popwindow`是`android.widget.PopupWindow`类的一个实例,它允许开发者在屏幕上的任意位置展示一个窗口,并且可以自定义窗口的内容、大小、动画等属性。`Popwindow`并不继承自`View`或`Dialog`,而是直接与`Window`...

    安卓popupwindow相关-仿微信popupwindow.zip

    微信的PopupWindow可能包含更复杂的功能,如动画效果、自定义布局、滑动关闭等。在提供的源码中,开发者可能已经实现了类似微信的下拉选择、消息提示等效果。要理解和使用这部分代码,需要查看具体的JavaApk源码,...

    安卓Android源码——仿微信标题栏右上角PopupWindow.rar

    本资源“安卓Android源码——仿微信标题栏右上角PopupWindow.rar”提供了一个实现类似微信应用顶部标题栏右上角弹出窗口的功能。这个功能在微信中常见于设置、消息通知等操作,它以一个小型悬浮窗口的形式出现在屏幕...

    Android ListView 仿微信侧滑删除

    "Android ListView 仿微信侧滑删除"这个主题涉及到如何实现类似微信中常见的侧滑菜单功能,即用户在ListView的每一项上向左滑动时,会显示出一个包含删除按钮的视图,允许用户快速删除列表中的某一项。下面我们将...

    Android自定义ListView实现仿微信侧滑删除

    在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。...开发者可以通过阅读和学习这些代码,加深对Android自定义ListView和PopupWindow的理解,从而更好地实现自己的项目需求。

    仿微信popupwindow,android源码

    1. **动画效果**:微信PopupWindow在弹出和消失时通常会伴随着平滑的动画,这需要我们自定义动画资源并应用到PopupWindow的showAsDropDown()或showAtLocation()方法中。 2. **背景半透明**:微信的PopupWindow往往...

Global site tag (gtag.js) - Google Analytics