`
mmdev
  • 浏览: 12916251 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

源码下载



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics