您的位置:首页 > 移动开发 > Android开发

android dialog 模拟新浪、腾讯title弹框效果

2012-07-19 17:51 330 查看
  首先我们看一下新浪微博的效果(其它就是一个dialog):

             

              


                         点击title前                                                    点击title后

 实现方式:

     首先我们要自定义一个dialog

    代码如下:

    

/***
* 自定义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 x
* @param y
* @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;
}

});
}
});
实现效果如下:

 

     

   

 
 


           点击前                                                点击后                                             选择                                                   选择后

实现起来也不难,有点要说明一下,这里我们用到了.9.png图片,这个图片会自动根据需要伸展,(重要的是不失真,这点很棒吧,详细介绍请点击连接).

 源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息