【问题标题】:Set padding postInvalidate not removing padding on the bottom part on left side of puzzle设置填充 postInvalidate 不删除拼图左侧底部的填充
【发布时间】:2026-01-29 03:55:01
【问题描述】:

您好,目前我正在研究一个对一张图像进行切片和随机化的拼图。设置后,我手动将所有角的填充设置为 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
}

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

这是示例的屏幕截图。

关于创建的谜题(见左侧底部的奇数填充)

完成后:

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

更新:

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

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    对此有一个解决方法,您可以创建一个类似于 onPuzzelCompleteListener() 的侦听器,您现在正在这样做以删除填充。在这里,您可以显示带有完整图像的 ImageView。这应该可以解决您现在的填充问题。

    【讨论】:

    • 是的,这就是我现在所做的,尽管我会继续为此寻找更好的解决方案。