項目中,我需要PopupWindow的時候特別多,這個東西也特別的好使,因此我今天給你們寫一款PopupWindow 仿微信彈出效果。這樣你們直接拿到項目裏就可以用了!html
首先讓咱們先看效果:java
那麼我首先先看下佈局代碼很easy:例如如下android
<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; } }); } }
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; } } }; }圖片資源我會隨源代碼一塊兒給大家,下載吧。直接用到項目,簡單高效哈哈
源代碼下載地址微信