自定义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 LostPopupWindow(final Activity context) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        conentView = inflater.inflate(R.layout.lost_pop_menu, null);
        int h = context.getWindowManager().getDefaultDisplay().getHeight();
        int w = context.getWindowManager().getDefaultDisplay().getWidth();
        // 设置SelectPicPopupWindow的View
        this.setContentView(conentView);
        // 设置SelectPicPopupWindow弹出窗体的宽
        this.setWidth(w / 2 + 50);
        // 设置SelectPicPopupWindow弹出窗体的高
        this.setHeight(LayoutParams.WRAP_CONTENT);
        // 设置SelectPicPopupWindow弹出窗体可点击
        this.setFocusable(true);
        this.setOutsideTouchable(true);
        // 刷新状态
        this.update();
        // 实例化一个ColorDrawable颜色为半透明
        ColorDrawable dw = new ColorDrawable(0000000000);
        // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
        this.setBackgroundDrawable(dw);
        // mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
        // 设置SelectPicPopupWindow弹出窗体动画效果
        this.setAnimationStyle(R.style.AnimationPreview);
        LinearLayout send = (LinearLayout) conentView
                .findViewById(R.id.send);
        LinearLayout mySend = (LinearLayout) conentView
                .findViewById(R.id.my_send);
        LinearLayout all = (LinearLayout) conentView.findViewById(R.id.all);
        send.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                LostPopupWindow.this.dismiss();
                lost.onLost(2);
            }
        });

        mySend.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                LostPopupWindow.this.dismiss();
                lost.onLost(1);
            }
        });

        all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LostPopupWindow.this.dismiss();
                lost.onLost(0);
            }
        });
    }

    /**
     * 显示popupWindow
     *
     * @param parent
     */
    public void showPopupWindow(View parent) {
        if (!this.isShowing()) {
            // 以下拉方式显示popupwindow
            this.showAsDropDown(parent, parent.getLayoutParams().width / 2, 18);
        } else {
            this.dismiss();
        }
    }

}

R.layout.lost_pop_menu文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="200dp"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:background="@drawable/black_menu_pop_bg"
    android:orientation="vertical"
    android:paddingLeft="@dimen/activity_horizontal_margin">

    <LinearLayout
        android:id="@+id/send"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:scaleType="fitXY">

        <ImageView
            android:id="@+id/img5"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:src="@drawable/icon_lost_add" />

        <TextView
            android:id="@+id/item_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="发布信息"
            android:textColor="#e5e5e6"
            android:textSize="18sp" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#616467" />

    <LinearLayout
        android:id="@+id/my_send"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/img6"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:scaleType="fitXY"
            android:src="@drawable/icon_lost_my" />

        <TextView
            android:id="@+id/item_content1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="我发布的信息"
            android:textColor="#e5e5e6"
            android:textSize="18sp" />
    </LinearLayout>
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#616467" />

    <LinearLayout
        android:id="@+id/all"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/img7"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:scaleType="fitXY"
            android:src="@drawable/icon_all" />

        <TextView
            android:id="@+id/item_content2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="全部信息"
            android:textColor="#e5e5e6"
            android:textSize="18sp" />
    </LinearLayout>
</LinearLayout>

动画 R.style.AnimationPreview


<style name="AnimationPreview">
        <item name="android:windowEnterAnimation">@anim/fade_in</item>
        <item name="android:windowExitAnimation">@anim/fade_out</item>
    </style>



@anim/fade_in

<?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="0.001"
    android:toXScale="1.0"
    android:fromYScale="0.001"
    android:toYScale="1.0"
    android:pivotX="100%"
    android:pivotY="10%"
    android:duration="200" />


@anim/fade_out

<!-- 左上角缩小 -->
<scale   xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_decelerate_interpolator"
    android:fromXScale="1.0"
    android:toXScale="0.001"
    android:fromYScale="1.0"
    android:toYScale="0.001"
    android:pivotX="100%"
    android:pivotY="10%"
    android:duration="200" />
调用

LostPopupWindow popWindow = new LostPopupWindow(ZiXunDetailActivity.this);
                ((ImageView)(popWindow.getConentView().findViewById(R.id.img5))).setImageResource(R.drawable.ckplico);
                ((ImageView)(popWindow.getConentView().findViewById(R.id.img6))).setImageResource(R.drawable.fbplico);
                ((ImageView)(popWindow.getConentView().findViewById(R.id.img7))).setImageResource(R.drawable.zfplico);
                ((TextView)(popWindow.getConentView().findViewById(R.id.item_content))).setText("查看评论");
                ((TextView)(popWindow.getConentView().findViewById(R.id.item_content1))).setText("发表评论");
                ((TextView)(popWindow.getConentView().findViewById(R.id.item_content2))).setText("转发文章");
                popWindow.showPopupWindow(linMain);
                popWindow.onLost(new Lost() {
                    @Override
                    public void onLost(int index) {
                        switch (index){
                            case 0: //转发文章
                                break;
                            case 1:      //发表评论
                                lineFooter.setVisibility(View.VISIBLE);
                                break;
                            case 2://查看评论
                                Bundle bundle=new Bundle();
                                bundle.putString("id",mID);
                                startActivity(PingLunActivity.class, "热门评论", bundle);
                                break;
                        }
                    }
                });
效果二:(第一张图)

1.工具类

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;

import com.example.lgy.myviewpagerapplication.R;

public class SelectPicPopupWindow extends PopupWindow {


    private Button btn_take_photo, btn_pick_photo, btn_cancel;
    private View mMenuView;

    public SelectPicPopupWindow(Activity context,OnClickListener itemsOnClick) {
        super(context);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mMenuView = inflater.inflate(R.layout.alert_dialog, null);
        btn_take_photo = (Button) mMenuView.findViewById(R.id.btn_take_photo);
        btn_pick_photo = (Button) mMenuView.findViewById(R.id.btn_pick_photo);
        btn_cancel = (Button) mMenuView.findViewById(R.id.btn_cancel);
        //取消按钮
        btn_cancel.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                //销毁弹出框
                dismiss();
            }
        });
        //设置按钮监听
        btn_pick_photo.setOnClickListener(itemsOnClick);
        btn_take_photo.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.AnimationPreview);
        //实例化一个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;
            }
        });

    }

}

2.布局,动画就用上面的

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    >

    <LinearLayout
        android:id="@+id/pop_layout"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:layout_alignParentBottom="true"
        android:background="@drawable/bg_home_search"
        >


        <Button
            android:id="@+id/btn_take_photo"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="20dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="拍照"
            android:background="@drawable/bg_home_search"
            android:textStyle="bold"
            />

        <Button
            android:id="@+id/btn_pick_photo"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="5dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="从相册选择"
            android:background="@drawable/bg_home_search"
            android:textStyle="bold"
            />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_marginLeft="20dip"
            android:layout_marginRight="20dip"
            android:layout_marginTop="15dip"
            android:layout_marginBottom="15dip"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="取消"
            android:background="@drawable/bg_home_search"
            android:textStyle="bold"

            />
    </LinearLayout>
</RelativeLayout>

3.按钮背景

<?xml version="1.0" encoding="utf-8"?>
<!--<shape xmlns:android="http://schemas.android.com/apk/res/android"-->
    <!--android:shape="rectangle">-->
    <!--<corners android:radius="5dp"/>-->
    <!--<solid-->
        <!--android:color="@color/ball_blue"/>-->

<!--</shape>-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <stroke
        android:width="1dp"
        android:color="#C2C0C0" />
    <solid android:color="#FFFFFF" />
    <padding
        android:bottom="5dp"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp" />
    <corners android:radius="5dp" />
</shape>

4.主函数代码

import android.app.Activity;  
import android.os.Bundle;  
import android.view.Gravity;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.TextView;  
  
public class MainActivity extends Activity {  
  
    //自定义的弹出框类  
    SelectPicPopupWindow menuWindow;  
      
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        TextView tv = (TextView) this.findViewById(R.id.text);  
        //把文字控件添加监听,点击弹出自定义窗口  
        tv.setOnClickListener(new OnClickListener() {             
            public void onClick(View v) {  
                //实例化SelectPicPopupWindow  
                menuWindow = new SelectPicPopupWindow(MainActivity.this, itemsOnClick);  
                //显示窗口  
                menuWindow.showAtLocation(MainActivity.this.findViewById(R.id.main), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0); //设置layout在PopupWindow中显示的位置  
            }  
        });  
    }  
      
    //为弹出窗口实现监听类  
    private OnClickListener  itemsOnClick = new OnClickListener(){  
  
        public void onClick(View v) {  
            menuWindow.dismiss();  
            switch (v.getId()) {  
            case R.id.btn_take_photo:  
                break;  
            case R.id.btn_pick_photo:                 
                break;  
            default:  
                break;  
            }  
              
                  
        }  
          
    };  
      
}  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值