平板中UI 模拟餐馆真实布局
2015-11-19 14:26
615 查看
最近项目有个需求是实现模拟餐馆真实的餐桌布局,后台给出的数据实体是:
1.
2.
实现代码:
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); }
相关文章推荐
- UIBezierPath和CAShapeLayer结合绘制任意弧度的圆形(包含旋转动画)
- Longest increasing subsequence |LeetCode
- HDU 5538/ 2015长春区域 L.House Building 水题
- Kibana User Guide [4.2] » Getting Started with Kibana » Putting it all Together with Dashboards
- 转:如何设计一个沉浸式UI
- 用UICollectionView实现无限轮播案列
- UITableViewCell 分隔线顶头显示
- hdu 4027 Can you answer these queries? 线段树
- GUI 关于JComboBox的用法
- 黑马程序员--Java笔记09--字符串String 及StringBuilder等及其常用方法
- Isilon OneFS Simulator Install Guide
- Servlet:response和request
- [转]如何处理UI对象和场景对象点击事件冲突/重复
- 深入理解dispatch_queue
- codeforce 597C-Subsequences(dp+树状数组)
- iOS UIView设置圆角
- 关于php内核中 __builtin_expect 的解释
- the behavior of the UICollectionViewFlowLayout is not defined because:
- 再用UICollectionView做无限轮播的时候,布局错乱出现黑边,很可能是
- String、StringBuffer和StringBuilder的区别