设置填充postInvalidate不删除拼图左侧底部的填充

时间:2014-09-04 03:39:15

标签: android android-layout

嗨,目前我正在制作一个切片并随机化一个图像的拼图。在设置完毕后,我已经为所有角落手动设置填充为2,然后在拼图完成后,所有角落都应该将填充设置为0以完整显示图像。问题是发生奇怪的事情,其中​​只有拼图的右侧完全去除了填充物,而另一侧仍然在底部部分有填充物。这仅发生在规格较低的设备上。 (Nexus One等)

这是我完成拼图后设置填充的代码:

if(true){                   
    enable_puzzle = false;
    for (int i=0; i < parent.getChildCount(); i++){
        LinearLayout cont = (LinearLayout) parent.getChildAt(i);
        for (int c = 0; c < cont.getChildCount(); c++){
            View v  = cont.getChildAt(c);
            v.setClickable(false);
            v.setPadding(0,0,0,0);
            v.postInvalidate();
        }
        cont.postInvalidate();  //Tried this didn't work
    }
    parent.postInvalidate(); //Tried this didn't work
}

为了更好地理解我如何放置布局,这非常简单。我有一个linearLayout,它在水平方向上保存了imageViews,它将以垂直方向放入父容器中。

以下是示例截图。

创造之谜(参见左侧底部的奇数填充)

Puzzle 1

完成后:

enter image description here

这是我的Nexus S模拟器上的屏幕截图。同样的事情发生在具有较低规格的真实设备上。

更新:

检查后,似乎主要原因是图像容器的宽度。由于我有4x4拼图并且使用重量而不是固定尺寸,因此每个图像的宽度不均匀分布,导致1px / dp差异。现在唯一的问题是如何才能将父级水平布局的宽度分割并向上舍入以获得每个图像视图的均匀结果?

1 个答案:

答案 0 :(得分:1)

有一种解决方法,您可以创建类似onPuzzelCompleteListener()的侦听器,即使是现在您正在执行的删除填充的内容。在这里,您可以显示带有完整图像的ImageView。这应该解决你现在的填充问题。