博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
计算mView在view周围的位置
阅读量:6248 次
发布时间:2019-06-22

本文共 2843 字,大约阅读时间需要 9 分钟。

  hot3.png

    /**     * 计算mView在view周围的位置     *     * @param view     *     * @param mMargin mView与view或边界的间距     *         *     titleBarHeight 标题栏的高度     *   mContext当前的Activity     */    private void aroundView(View view, float mMargin) {        if (view == null) {            return;        }        boolean showLeft;        boolean showRight;        boolean showUp;        boolean showDown;        if (titleBarHeight == 0) {            Rect frame = new Rect();            ((Activity) mContext).getWindow().getDecorView()                    .getWindowVisibleDisplayFrame(frame);            int statusBarHeight = frame.top;            int contentTop = ((Activity) mContext).getWindow()                    .findViewById(Window.ID_ANDROID_CONTENT).getTop();            titleBarHeight = contentTop - statusBarHeight;        }        int width = mView.getWidth();//如果Params获取不到长宽,就在Dialog显示之后获取长宽        int height = mView.getHeight();        android.view.ViewGroup.LayoutParams lp = mView.getLayoutParams();        if(lp!=null){ //主要以这步计算长宽为主,如果获取不到再退而求其次            width = lp.width;            height = lp.height;        }        if(width == 0 && height == 0){//如果两种方法都获取不到长宽,则默认给一个值,下次用getWidth获得            width = (int) (mWinWidth/2 - mMargin);            height = (int) (mWinheight/2 - mMargin);        }        showLeft = showRight = showUp = showDown = false;        if ((view.getX() - mMargin) >= width) {//左            showLeft = true;            showRight = false;        }        if ((mWinWidth - view.getX() - mMargin) >= width) {//右            showLeft = false;            showRight = true;        }        if ((view.getY() - mMargin) >= height) {//上            showUp = true;            showDown = false;        }        if ((mWinheight - view.getY() - mMargin) >= height) {//下            showUp = false;            showDown = true;        }        // 根据计算,设置坐标        if (showLeft) {            mView.setX(view.getX() + view.getWidth() - width - mMargin);        } else if (showRight) {            mView.setX(view.getX() + mMargin);        } else {            mView.setX(mWinWidth - mMargin - width);        }                // 根据计算,设置坐标        if (showLeft) {            mView.setX(view.getX() + view.getWidth() - width - mMargin);        } else if (showRight) {            mView.setX(view.getX() + mMargin);        } else {            mView.setX(mWinWidth - mMargin - width);//如果宽度偏大,则右对齐        }        if (showUp) {            mView.setY(view.getY() - height + titleBarHeight - mMargin);        } else if (showDown) {            mView.setY((view.getY() + view.getHeight()) + titleBarHeight                    + mMargin);        } else {            //如果高度偏大,在下面显示            mView.setY((view.getY() + view.getHeight()) + titleBarHeight                    + mMargin);        }    }

本博客原地址:

转载于:https://my.oschina.net/reone/blog/533426

你可能感兴趣的文章
经典回忆Effective C++ 1
查看>>
JQUERY名称冲突
查看>>
poj 1975 Median Weight Bead(传递闭包 Floyd)
查看>>
【C++ Primer每天刷牙】一间 迭代器
查看>>
:施密特建议尾随年轻的专业人士了解技术公司
查看>>
软件项目如何选型
查看>>
UVa 11205 - The broken pedometer
查看>>
[书目20150727]选择重于一切(扎克伯格给年轻人的37个人生忠告)
查看>>
Apache与Nginx的优缺点比较
查看>>
【第二篇】Volley的使用之加载图片
查看>>
hdu oj1102 Constructing Roads(最小生成树)
查看>>
减少可执行程序size的三个常用软件
查看>>
窥探Swift之别样的枚举类型
查看>>
pyspark简要原则
查看>>
【移动开发】Android中WIFI开发总结(二)
查看>>
idea git merge代码
查看>>
云计算设计模式(二十二)——静态内容托管模式
查看>>
[Angularjs]ng-file-upload上传文件
查看>>
修改类不用重启Tomcat加载整个项目
查看>>
iframe刷新父页面
查看>>