zoukankan      html  css  js  c++  java
  • android dialog 模拟新浪、腾讯title弹框效果

    http://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 / 2, 300, 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图片,这个图片会自动根据需要伸展,(重要的是不失真,这点很棒吧,详细介绍请点击连接).

     源码下载

  • 相关阅读:
    如何加速JavaScript 代码
    以Kafka Connect作为实时数据集成平台的基础架构有什么优势?
    Java多线程开发系列之一:走进多线程
    java运行环境和运行机制
    C#先序遍历2叉树(非递归)
    Java 之 List<T> 接口的实现:ArrayList
    string.split() 解读---------->从java 和C#的角度剖析
    究竟什么是语法糖呢
    Eclipse 恢复删除的文件
    Notepad++自动刷新文本
  • 原文地址:https://www.cnblogs.com/wangluochong/p/4550903.html
Copyright © 2011-2022 走看看