閱讀459 返回首頁    go 京東網上商城


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

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

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

                            

                         點擊title前                                                    點擊title後

 實現方式:

     首先我們要自定義一個dialog

    代碼如下:

    

[java] view plaincopy
  1. /*** 
  2.  * 自定義dialog 
  3.  *  
  4.  * @author jia 
  5.  *  
  6.  */  
  7. public class MyDialog extends Dialog {  
  8.     private Window window = null;  
  9.   
  10.     /*** 
  11.      *  
  12.      * @param context 
  13.      * @param layoutResID 
  14.      *            配置文件 
  15.      * @param x 
  16.      *            顯示的x坐標 
  17.      * @param y 
  18.      *            顯示的y坐標 
  19.      * @param title 
  20.      *            集合 
  21.      */  
  22.     public MyDialog(final Context context, int layoutResID, int x, int y,  
  23.             final String[] title) {  
  24.         super(context, R.style.Transparent);  
  25.   
  26.         window = this.getWindow();  
  27.         window.requestFeature(Window.FEATURE_NO_TITLE);  
  28.         setContentView(layoutResID);  
  29.         int width = this.getWindow().getWindowManager().getDefaultDisplay()  
  30.                 .getWidth();  
  31.         windowDeploy(width / 2300, x, y);  
  32.         show();  
  33.   
  34.     }  
  35.   
  36.     /*** 
  37.      * 設置窗口顯示 
  38.      *  
  39.      * @param x 
  40.      * @param y 
  41.      * @param dialog_x 
  42.      * @param dialog_y 
  43.      */  
  44.     public void windowDeploy(int dialog_width, int dialog_height, int dialog_x,  
  45.             int dialog_y) {  
  46.   
  47.         window.setBackgroundDrawableResource(android.R.color.transparent); // 設置對話框背景為透明  
  48.         WindowManager.LayoutParams wl = window.getAttributes();  
  49.         wl.width = dialog_width;  
  50.         wl.height = dialog_height;  
  51.         // wl.alpha = 0.8f;  
  52.         wl.gravity = Gravity.LEFT | Gravity.TOP; // 不設置的話默認是居中  
  53.         wl.x = dialog_x - dialog_width / 2// 要顯示的位置x坐標  
  54.         wl.y = dialog_y;  
  55.         window.setAttributes(wl);  
  56.         window.setWindowAnimations(R.style.dialogWindowAnim); // 設置窗口彈出動畫  
  57.         setCanceledOnTouchOutside(true);  
  58.     }  
  59.   
  60. }  

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

 代碼片段:

 

[java] view plaincopy
  1. textView.setOnClickListener(new OnClickListener() {  
  2.             @Override  
  3.             public void onClick(View v) {  
  4.   
  5.                 int x_begin = textView.getLeft();  
  6.                 int x_end = textView.getRight();  
  7.                 int y_begin = textView.getTop();  
  8.                 int y_end = textView.getBottom();// 這個是要顯示位置的縱坐標  
  9.                 // 獲取最中間的x坐標  
  10.                 int x = (x_begin + x_end) / 2;// 這個值也就是屏幕最中間的值,也可以下麵這樣  
  11.                 // int x=getWindowManager().getDefaultDisplay().getWidth()/2;  
  12.   
  13.                 // int[] location = new int[2];  
  14.                 // textView.getLocationInWindow(location); // 獲取在當前窗口內的絕對坐標  
  15.                 // textView.getLocationOnScreen(location);// 獲取在整個屏幕內的絕對坐標  
  16.   
  17.                 myDialog = new MyDialog(DialogDemoActivity.this,  
  18.                         R.layout.dialog, x, y_end, title);  
  19.   
  20.                 View view = LayoutInflater.from(DialogDemoActivity.this)  
  21.                         .inflate(R.layout.dialog, null);  
  22.                 listView = (ListView) myDialog.getWindow().findViewById(  
  23.                         R.id.lv_dialog);  
  24.                 listView.setAdapter(new ArrayAdapter<String>(  
  25.                         DialogDemoActivity.this, R.layout.text, R.id.tv_text,  
  26.                         title));  
  27.   
  28.                 listView.setOnItemClickListener(new OnItemClickListener() {  
  29.   
  30.                     @Override  
  31.                     public void onItemClick(AdapterView<?> arg0, View arg1,  
  32.                             int arg2, long arg3) {  
  33.                         textView.setText(title[arg2]);  
  34.                         myDialog.cancel();  
  35.                         myDialog = null;  
  36.                     }  
  37.   
  38.                 });  
  39.             }  
  40.         });  
實現效果如下:

            

           點擊前                                                點擊後                                             選擇                                                   選擇後


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

 源碼下載


最後更新:2017-04-03 12:53:56

  上一篇:go linux驅動開發--導出內核符號
  下一篇:go GNU C 擴展之__attribute__ 機製簡介