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

  首先我们看一下新浪微博的效果(其它就是一个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图片,这个图片会自动根据需要伸展,(重要的是不失真,这点很棒吧,详细介绍请点击连接).

 源码下载



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值