天天看點

android dialog 模拟新浪、騰訊title彈框效果

http://blog.csdn.net/jj120522/article/details/7764183

首先我們看一下新浪微網誌的效果(其它就是一個dialog):

android dialog 模拟新浪、騰訊title彈框效果
android dialog 模拟新浪、騰訊title彈框效果

                         點選title前                                                    點選title後

 實作方式:

     首先我們要自定義一個dialog

    代碼如下:

[java] view

plaincopy

/*** 

 * 自定義dialog 

 *  

 * @author jia 

 */  

public class mydialog extends dialog {  

    private window window = null;  

    /*** 

     *  

     * @param context 

     * @param layoutresid 

     *            配置檔案 

     * @param x 

     *            顯示的x坐标 

     * @param y 

     *            顯示的y坐标 

     * @param title 

     *            集合 

     */  

    public mydialog(final context context, int layoutresid, int x, int y,  

            final string[] title) {  

        super(context, r.style.transparent);  

        window = this.getwindow();  

        window.requestfeature(window.feature_no_title);  

        setcontentview(layoutresid);  

        int width = this.getwindow().getwindowmanager().getdefaultdisplay()  

                .getwidth();  

        windowdeploy(width / 2, 300, x, y);  

        show();  

    }  

     * 設定視窗顯示 

     * @param dialog_x 

     * @param dialog_y 

    public void windowdeploy(int dialog_width, int dialog_height, int dialog_x,  

            int dialog_y) {  

        window.setbackgrounddrawableresource(android.r.color.transparent); // 設定對話框背景為透明  

        windowmanager.layoutparams wl = window.getattributes();  

        wl.width = dialog_width;  

        wl.height = dialog_height;  

        // wl.alpha = 0.8f;  

        wl.gravity = gravity.left | gravity.top; // 不設定的話預設是居中  

        wl.x = dialog_x - dialog_width / 2; // 要顯示的位置x坐标  

        wl.y = dialog_y;  

        window.setattributes(wl);  

        window.setwindowanimations(r.style.dialogwindowanim); // 設定視窗彈出動畫  

        setcanceledontouchoutside(true);  

}  

 我們隻需要在activity中調用即可:

 代碼片段:

textview.setonclicklistener(new onclicklistener() {  

            @override  

            public void onclick(view v) {  

                int x_begin = textview.getleft();  

                int x_end = textview.getright();  

                int y_begin = textview.gettop();  

                int y_end = textview.getbottom();// 這個是要顯示位置的縱坐标  

                // 擷取最中間的x坐标  

                int x = (x_begin + x_end) / 2;// 這個值也就是螢幕最中間的值,也可以下面這樣  

                // int x=getwindowmanager().getdefaultdisplay().getwidth()/2;  

                // int[] location = new int[2];  

                // textview.getlocationinwindow(location); // 擷取在目前視窗内的絕對坐标  

                // textview.getlocationonscreen(location);// 擷取在整個螢幕内的絕對坐标  

                mydialog = new mydialog(dialogdemoactivity.this,  

                        r.layout.dialog, x, y_end, title);  

                view view = layoutinflater.from(dialogdemoactivity.this)  

                        .inflate(r.layout.dialog, null);  

                listview = (listview) mydialog.getwindow().findviewbyid(  

                        r.id.lv_dialog);  

                listview.setadapter(new arrayadapter<string>(  

                        dialogdemoactivity.this, r.layout.text, r.id.tv_text,  

                        title));  

                listview.setonitemclicklistener(new onitemclicklistener() {  

                    @override  

                    public void onitemclick(adapterview<?> arg0, view arg1,  

                            int arg2, long arg3) {  

                        textview.settext(title[arg2]);  

                        mydialog.cancel();  

                        mydialog = null;  

                    }  

                });  

            }  

        });  

實作效果如下:

android dialog 模拟新浪、騰訊title彈框效果
android dialog 模拟新浪、騰訊title彈框效果
android dialog 模拟新浪、騰訊title彈框效果
android dialog 模拟新浪、騰訊title彈框效果

           點選前                                                點選後                                             選擇                                                   選擇後

實作起來也不難,有點要說明一下,這裡我們用到了.9.png圖檔,這個圖檔會自動根據需要伸展,(重要的是不失真,這點很棒吧,詳細介紹請點選連接配接).

 源碼下載下傳

繼續閱讀