2014-09-04 93 views
0

您好目前我正在研究一个拼图,并随机分配一个图像。设置完成后,我已经手动将填充设置为2,然后在拼图完成后,填充在所有角落都应设置为0,以便全部显示图像。问题是有一个奇怪的事情发生,其中只有拼图的右侧完全移除填充物,而另一侧仍然在底部填充填充物。这只发生在规格较低的设备上。 (Nexus One和一致好评)设置填充postInvalidate不去除填充左侧底部的拼图

这里的完成拼图后,我对填充的设置代码:

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的屏幕截图模拟器。同样的事情发生在低规格的真实设备上。

UPDATE:

在检查看来主要原因是对图像中的容器的宽度。由于我有一个4x4拼图,并且使用重量而不是固定尺寸,因此每个图像的宽度不均匀分布,导致1px/dp的差异。现在唯一的问题是我怎样才能获得父级水平布局的宽度,并将其划分,以便为每个图像查看获得均匀的结果?

回答

1

对此有一种解决方法,你可以创建一个类似onPuzzelCompleteListener()的监听器,这是你现在要做的事情来删除填充。在这里,您可以用完整的图像显示ImageView。这应该可以解决你的填充问题。

+0

是的,这是我现在所做的,尽管我会继续寻找更好的解决方案。 – KaHeL 2014-09-05 11:33:57