天天看點

安卓自定義PopWindow

1、建立自定義PopWindow

2、建立anim,彈出彈入動畫,和動畫Style

3、實際使用案例

1、建立自定義PopWindow

1.1 建立展示界面

在建立該類之前,先構思好需要展示的布局檔案(PopWindow展示的界面)樣式。

安卓自定義PopWindow

1.2 自定義建立PopWindow類

public void initPopWindow(){
	//初始化
        //擷取PopWindow()布局的view
        mView = LinearLayout.inflate(mContext, R.layout.popup_takephoto, null);
        mPopupWindow = new PopupWindow(mView,LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT,true);
        mPopupWindow.setTouchable(true);
        mPopupWindow.setOutsideTouchable(true);
        mPopupWindow.setBackgroundDrawable(new BitmapDrawable(mContext.getResources(), (Bitmap )null));

        mPopupWindow.getContentView().setFocusableInTouchMode(true);
        mPopupWindow.setFocusable(true);
        mPopupWindow.setAnimationStyle(R.style.anim_menu_bottombar);
	//布局點選設定
	//如果需要對PopupWindow布局中設定點選事件,可通過布局的View擷取,并設定點選事件
        mView.findViewById(R.id.popup_camera).setOnClickListener(this);
        mView.findViewById(R.id.popup_album).setOnClickListener(this);
        mView.findViewById(R.id.popup_cancel).setOnClickListener(this);

    }
//顯示PopupWindow的方法
public void showAtBottom( View view){
        mPopupWindow.showAtLocation(mView, Gravity.BOTTOM, 0, 0);
        mPopupWindow.showAsDropDown(view);
    }
//隐藏PopupWindow的方法
    public void dismiss(){
        mPopupWindow.dismiss();
    }
   // 自定義布局點選事件的接口
  Public interface PopItemClickListener{
Void onClickItem(intRequestCode);
}
public void setPopItemClickListener(PopItemClickListenerpopItemClickListener){
mPopItemClickListener=popItemClickListener;
}
           

2、建立anim,彈出彈入動畫,和動畫Style

2.1建立anim

在res目錄下建立anim檔案夾

安卓自定義PopWindow

建立Animation動畫包括彈入彈出兩個動畫檔案。

安卓自定義PopWindow

該動畫檔案用到的是 平移動畫:

① anim_menu_bottombar_in

<?xmlversion="1.0"encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android">
<translate
android:duration="250"
android:fromYDelta="100.0%"
android:toYDelta="0.0"
/>
</set>
           

② anim_menu_bottombar_out

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:duration="250"
    android:fromYDelta="0.0%"
    android:toYDelta="100.0"
    />
</set>
           

建立後的目錄結構如下圖所示

安卓自定義PopWindow

2.2 在Style中設定

在values/styles檔案中添加建立好的動畫屬性。

<style name="anim_menu_bottombar">
        <item name="android:windowEnterAnimation">@anim/anim_menu_bottombar_in</item>
        <item name="android:windowExitAnimation">@anim/anim_menu_bottombar_out</item>
    </style>
           

在代碼中使用該style屬性

mPopupWindow.setAnimationStyle(R.style.anim_menu_bottombar);
           

3、實際使用案例

在需要使用的時候,首先進行自定義Popwindow的初始化操作。

//初始化popwindow
mCameraPopupWindow = new CameraPopupWindow(this);
mCameraPopupWindow.initPopWindow();
mCameraPopupWindow.setPopItemClickListener(new CameraPopupWindow.PopItemClickListener(){
@Override
publicvoidonClickItem(intRequestCode){
//popwindow中item點選事件的處理
}});
//在需要顯示的時候調用
mCameraPopupWindow.showAtBottom(v);

//隐藏該Popwindow
mCameraPopupWindow.dismiss();