zoukankan      html  css  js  c++  java
  • Android PopupWindow 仿微信弹出效果

    项目中,我须要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果。这样大家直接拿到项目里就能够用了!

    首先让我们先看效果:


    那么我首先先看下布局代码很easy:例如以下

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@drawable/bg_pulish"
        android:gravity="center"
        android:orientation="vertical" >
    
        <Button
            android:id="@+id/btn_hand"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="20dip"
            android:background="@drawable/bg_publish_product_selector"
            android:text="1"
            android:textStyle="bold" />
    
        <Button
            android:id="@+id/btn_library"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="20dip"
            android:background="@drawable/bg_publish_product_selector"
            android:text="2"
            android:textStyle="bold" />
    
        <Button
            android:id="@+id/btn_two_code"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="20dip"
            android:background="@drawable/bg_publish_product_selector"
            android:text="3"
            android:textStyle="bold" />
    
        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="30dip"
            android:layout_marginBottom="30dp"
            android:background="@drawable/bg_publish_product_selector"
            android:text="取消"
            android:textStyle="bold" />
    
    </LinearLayout>

    以下我们来看核心的代码。例如以下

    package com.example.showpopupwindow;
    
    
    
    import android.app.Activity;
    import android.content.Context;
    import android.graphics.drawable.ColorDrawable;
    import android.view.LayoutInflater;
    import android.view.MotionEvent;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.View.OnTouchListener;
    import android.view.ViewGroup.LayoutParams;
    import android.widget.Button;
    import android.widget.PopupWindow;
    
    public class PublishSelectPicPopupWindow extends PopupWindow {
    
    
    	private Button btnHand;
    	private Button btnLibrary;
    	private Button btnTwocode;
    	private Button btnCancel;
    	private View mMenuView;
    
    	@SuppressWarnings("deprecation")
    	public PublishSelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {
    		super(context);
    		LayoutInflater inflater = (LayoutInflater) context
    				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    		mMenuView = inflater.inflate(R.layout.publish_dialog, null);
    		btnHand = (Button) mMenuView.findViewById(R.id.btn_hand);
    		btnLibrary = (Button) mMenuView.findViewById(R.id.btn_library);
    		btnTwocode=(Button) mMenuView.findViewById(R.id.btn_two_code);
    		btnCancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
    		btnCancel.setOnClickListener(new OnClickListener() {
    
    			public void onClick(View v) {
    				dismiss();
    			}
    		});
    		//设置button监听
    		btnHand.setOnClickListener(itemsOnClick);
    		btnLibrary.setOnClickListener(itemsOnClick);
    		btnTwocode.setOnClickListener(itemsOnClick);
    		btnCancel.setOnClickListener(itemsOnClick);
    		//设置SelectPicPopupWindow的View
    		this.setContentView(mMenuView);
    		//设置SelectPicPopupWindow弹出窗口的宽
    		this.setWidth(LayoutParams.FILL_PARENT);
    		//设置SelectPicPopupWindow弹出窗口的高
    		this.setHeight(LayoutParams.WRAP_CONTENT);
    		//设置SelectPicPopupWindow弹出窗口可点击
    		this.setFocusable(true);
    		//设置SelectPicPopupWindow弹出窗口动画效果
    		this.setAnimationStyle(R.style.AnimBottom);
    		//实例化一个ColorDrawable颜色为半透明
    		ColorDrawable dw = new ColorDrawable(0xb0000000);
    		//设置SelectPicPopupWindow弹出窗口的背景
    		this.setBackgroundDrawable(dw);
    		//mMenuView加入OnTouchListener监听推断获取触屏位置假设在选择框外面则销毁弹出框
    		mMenuView.setOnTouchListener(new OnTouchListener() {
    			public boolean onTouch(View v, MotionEvent event) {
    				
    				int height = mMenuView.findViewById(R.id.pop_layout).getTop();
    				int y=(int) event.getY();
    				if(event.getAction()==MotionEvent.ACTION_UP){
    					if(y<height){
    						dismiss();
    					}
    				}				
    				return true;
    			}
    		});
    
    	}
    
    }
    

    我们在MainActivity调用我们写好的代码 例如以下:

    package com.example.showpopupwindow;
    
    
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.Gravity;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    	private PublishSelectPicPopupWindow menuWindow;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		final Button button=(Button) findViewById(R.id.button1);
    		button.setOnClickListener(new OnClickListener() {
    			
    			
    
    			@Override
    			public void onClick(View v) {
    				// 实例化SelectPicPopupWindow
    				menuWindow = new PublishSelectPicPopupWindow(MainActivity.this,itemsOnClick);
    				// 显示窗体
    				menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.button1),
    						Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, 0);
    			}
    		});
    	}
    	// 为弹出窗体实现监听类
    		private OnClickListener itemsOnClick = new OnClickListener() {
    
    			public void onClick(View v) {
    				menuWindow.dismiss();
    				switch (v.getId()) {
    				case R.id.btn_hand:
    					Toast.makeText(MainActivity.this, "1", 2).show();
    					break;
    				case R.id.btn_two_code:
    					Toast.makeText(MainActivity.this, "2", 2).show();
    					break;
    				case R.id.btn_library:
    					Toast.makeText(MainActivity.this, "3", 2).show();
    					break;
    				default:
    					break;
    				}
    
    			}
    		};
    
    }
    
    图片资源我会随源代码一起给你们,下载吧。直接用到项目,简单高效哈哈


    源代码下载地址




  • 相关阅读:
    【QT】error: 'connect'/'sender' was not declared in this scope
    【QT】添加图片资源并使用QImage加载图片显示
    【QT】去掉.ui窗口的最大化、最小化和关闭按钮
    【Linux】(一)美化Linux终端之oh-my-zsh开源项目(Linux终端主题)
    【git】配置git命令行别名
    浅谈函数防抖与函数节流
    php连接数据库的天龙八部!
    JavaScript画圆
    表格的即时编辑
    用html+css+js模拟下拉菜单
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7399645.html
Copyright © 2011-2022 走看看