459
京東網上商城
android dialog 模擬新浪、騰訊title彈框效果
https://blog.csdn.net/jj120522/article/details/7764183
首先我們看一下新浪微博的效果(其它就是一個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圖片,這個圖片會自動根據需要伸展,(重要的是不失真,這點很棒吧,詳細介紹請點擊連接).
最後更新:2017-04-03 12:53:56