平板中UI 模拟餐馆真实布局

原创 2015年11月19日 14:26:14

最近项目有个需求是实现模拟餐馆真实的餐桌布局,后台给出的数据实体是:

1.

private int height;     //参照的基准高度
private int width;      //参照的基准宽度
private int id;
private String name;
private String roomImg;        //房间的图片
private TablesModel[] tables;  //餐桌实体
2.

private int coordinateX;    //餐桌的X坐标
private int coordinateY;    //餐桌的Y坐标
private int height;         //餐桌的高度
private int width;          //餐桌的宽度
private int id;
private String name;
private int roomId;
private String tableImg;    //餐桌的图片

实现代码:

 private void showRoomsUI(ViewGroup group, RestRoomsModel roomsModel) {
        group.removeAllViews();
        referenceWidth = roomsModel.getWidth();
        referenceHeight = roomsModel.getHeight();
        final TablesModel[] tablesModels = roomsModel.getTables();
        for (int i = 0; i < tablesModels.length; i++) {
            View view = LayoutInflater.from(this)
                    .inflate(R.layout.table_layout /* resource id */, group /* parent */, false);
            setLayout(view, getScaleX(tablesModels[i]), getScaleY(tablesModels[i]),
                    getScaleW(tablesModels[i]), getScaleH(tablesModels[i]));

            ImageView table_img = (ImageView) view.findViewById(R.id.iv_table_img);
            final TextView table_name = (TextView) view.findViewById(R.id.tv_table_name);
            table_name.setText(tablesModels[i].getName());
            AsyncImageLoader.displayImage(tablesModels[i].getTableImg(), table_img);

            group.addView(view);
          
        }
    }

   /**
     * 得到餐桌的宽和高应该缩放的比例
     * @return
     */
    private double getScale() {
        double sh, sw;
        if (WidgetController.getScreenHeight() > WidgetController.getScreenWidth()) {
            sh = WidgetController.getScreenWidth();
            sw = WidgetController.getScreenHeight();
        } else {
            sh = WidgetController.getScreenHeight();
            sw = WidgetController.getScreenWidth();
        }

        // 同比例放大时 检测是高度先充满还是宽带先充满
        if (sw / referenceWidth > sh / referenceHeight) { //高度先充满
            return sh / referenceHeight;
        } else {    //宽度先充满
            return sw / referenceWidth;
        }
    }

    /**
     * 得到餐桌 X 坐标应该缩放的比例
     * @return
     */
    private double getXScale() {
        double sw;
        if (WidgetController.getScreenHeight() > WidgetController.getScreenWidth()) {
            sw = WidgetController.getScreenHeight();
        } else {
            sw = WidgetController.getScreenWidth();
        }

        return sw / referenceWidth;
    }

    /**
     * 得到餐桌 Y 坐标应该缩放的比例
     * @return
     */
    private double getYScale() {
        double sh;
        if (WidgetController.getScreenHeight() > WidgetController.getScreenWidth()) {
            sh = WidgetController.getScreenWidth();
        } else {
            sh = WidgetController.getScreenHeight();
        }

        return sh / referenceHeight;
    }

    /**
     * 得到餐桌的高度
     * @param tablesModel
     * @return
     */
    private int getScaleH(TablesModel tablesModel) {
        return (int) (tablesModel.getHeight() * getScale());
    }

    /**
     * 得到餐桌的宽度
     * @param tablesModel
     * @return
     */
    private int getScaleW(TablesModel tablesModel) {
        return (int) (tablesModel.getWidth() * getScale());
    }

    /**
     * 得到餐桌相对于自己设备的 X 坐标
     * @param tablesModel
     * @return
     */
    private int getScaleX(TablesModel tablesModel) {
        return (int) (tablesModel.getCoordinateX() * getXScale());
    }

    /**
     * 得到餐桌相对于自己设备的 Y 坐标
     * @param tablesModel
     * @return
     */
    private int getScaleY(TablesModel tablesModel) {
        return (int) (tablesModel.getCoordinateY() * getYScale()) + UIUtility.dp2px(48, this);
    }

    /**
     * 动态设置View位置
     *
     * @param view   View
     * @param x      X坐标
     * @param y      Y坐标
     * @param width  按照比例缩放后的宽度
     * @param height 按照比例缩放后的高度
     */
    public void setLayout(View view, int x, int y, int width, int height) {
        ViewGroup.MarginLayoutParams margin = new ViewGroup.MarginLayoutParams(view.getLayoutParams());
        margin.leftMargin = x;
        margin.topMargin = y;
        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(margin);
        layoutParams.height = height;
        layoutParams.width = width;
        view.setLayoutParams(layoutParams);
    }


利用Fragment编写简易新闻界面,布局同时适应Android手机和平板电脑

大家好,最近从事培训工作碰到一个练习题,利用Fragment编写简易新闻界面,并且布局能同时适应手机和平板电脑,这是书本上的一个练习题,题目本身没多大难度,个人觉得作者代码的模块化做得比较好,所以拿出...
  • yanwenmuc
  • yanwenmuc
  • 2015年08月20日 00:50
  • 1772

使用Genymotion模拟器模拟平板设备

在最近的项目开发中,遇到平板适配问题。使用限定符layout-large创建平板布局。因为我是用的是genymotion模拟器,所以需要模拟平板,但是百度许久不到答案。 后来发现,在genymoti...
  • qq_18149897
  • qq_18149897
  • 2017年06月04日 12:01
  • 1785

android 创建平板电脑模拟器

Android 4.0 平板电脑模拟器的安装设置   只需要在原本的 Android 4.0 手机模拟器的安装设置画面中,多增加设置两个选项就可以將 Android 4.0 手机模拟器立即变...
  • anladeyatou
  • anladeyatou
  • 2012年08月01日 11:18
  • 8811

QT布局和ui简单使用

1.布局的使用 垂直布局和分裂垂直布局的区别。分裂垂直布局可以将控件进行纵向拉长,而垂直布局不行。 2.ui使用 一个xx.ui对应一个继承自QWidgets...
  • u012235003
  • u012235003
  • 2017年05月06日 22:36
  • 290

OCUI界面设计:状态栏

简介 系统状态栏位于屏幕顶部,显示了当前设备的状态信息。 状态栏高度默认为20像素。 UIStatusBarStyle UIStatusBarStyleDefault 黑色文本 UIStatusBar...
  • Hierarch_Lee
  • Hierarch_Lee
  • 2015年08月08日 00:33
  • 1432

openjudge 开餐馆 【动态规划】

Description 北大信息学院的同学小明毕业之后打算创业开餐馆.现在共有n 个地点可供选择。小明打算从中选择合适的位置开设一些餐馆。这 n 个地点排列在同一条直线上。我们用一个整数序列m1, ...
  • bmicnj
  • bmicnj
  • 2016年07月31日 17:26
  • 1056

android-支持多种屏幕[声明适用于 Android 3.2 的平板电脑布局] 七

对于第一代运行 Android 3.0 的平板电脑,声明平板电脑 的正确方式是将它们放在有 xlarge 配置限定符的目录(例如 res/layout-xlarge/)中。为适应其他类型的平板电脑和屏...
  • ZHOU452840622
  • ZHOU452840622
  • 2017年04月01日 16:03
  • 272

android之屏幕适配,实践dimens.xml尺寸适配不同的平板

android3.2以后,为了提供更精准的对布局文件的控制,可以通过为资源文件(res目录下文件)增加后缀来指定该文件夹里的xml布局文件或color.xml,string.xml是为哪种大小的屏幕使...
  • xuwenwen_2013
  • xuwenwen_2013
  • 2017年03月09日 15:45
  • 1390

Android UI之五种基本布局详解

Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是: LinearLayout (线性布局) RelativeLayout(相对布局) FrameLayout(...
  • FLY346422332
  • FLY346422332
  • 2017年03月09日 15:52
  • 545

UI基本组件和几大布局

所有界面组件的基类(包括ViewGroup类)。常用属性: 属性名                    描述 android:alpha           透明度:0-1 android:b...
  • u013243573
  • u013243573
  • 2014年09月29日 15:49
  • 1208
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:平板中UI 模拟餐馆真实布局
举报原因:
原因补充:

(最多只允许输入30个字)