尽管设置了属性

时间:2015-09-01 18:40:43

标签: java android xml android-layout android-canvas

我刚刚制作了两张图纸,试图让一张图片与另一张图片相同,但我没有运气。关于屏幕截图,顶部的绘图是使用画布创建的,底部的绘图是使用XML创建的。 XML绘图对我来说是完美的,但不幸的是根据Android,我不应该使用它,因为它返回“太多视图”警告。我已经为画布绘图尝试了以下方法,但我仍然没有得到所需的结果。

  

我已经在十几个模拟器上测试了这个项目,尽管XML绘图有很多观点,但它们都只需要一秒钟就可以出现。

  1. 根据设备的方向使用不同的图纸
  2. 使用浮点值而不是整数
  3. 多次调整浮动值
  4. 有没有人知道有什么其他选项可以解决这个烦人的画布问题,并且还确保画布绘图看起来与XML绘图完全相同,而不管屏幕大小和方向如何?此情景中是否应忽略“太多视图”警告和/或我将查看次数限制增加到80以上?所有相关的帮助将受到高度赞赏。

    Java代码

    http://pastebin.com/VXgkJR2Z

    XML代码

    http://pastebin.com/JyVvxS5n

    enter image description here enter image description here

1 个答案:

答案 0 :(得分:7)

您可以在下面看到处理代码后的结果。它与xml几乎相似,但是如果你用mignifier来看它,你可以找到一些差异。

所以当你画画时有一些重要的事情。

  1. 不要使用int。你正在失去精确度。我将所有int替换为代码中的浮动。
  2. 小心循环。你也在循环中失去精确度。
  3. 代码中的常见模式:

    List<Double> doubles = getListOfDoubles();
    double sum = doubles.stream()
                        .mapToDouble(d -> d)
                        .sum();
    

    最好在循环中计算位置:

    float boxWidth = (getWidth() - mSideRectWidth) / 8; // I replaced int to float
    for (int i = 0; i < 8; i++) {
        float position = i * boxWidth; // loss of precision
        ...
    }
    
    1. 不要忘记笔画宽度。在计算形状和线条的位置时,您会错过该值。
    2. 这是我的完整代码:

      for (int i = 0; i < 8; i++) {
          float position = i * (getWidth() - mSideRectWidth) / 8;
          ...
      }
      

      肖像 Portrait

      风景 Landscape