如何在android中没有填充的情况下获得准确的命中矩形?

时间:2014-04-23 13:52:47

标签: android android-layout android-imageview android-view

我正在编写一个游戏,我需要检查两个视图之间的碰撞。当我因某种原因使用view.getHitRect(outputRect)方法时,视图的底部填充(所有其他填充都设置为0)被添加到视图的命中矩形的顶部属性中。我试图通过覆盖getHitRect方法来解决这个问题:

public abstract class GameView extends ImageView {
    @Override
    public void getHitRect(Rect outRect) {
        super.getHitRect(outRect);
        outRect.top+=getPaddingBottom();
    }

这让我得到了更好的结果,但它仍然不准确,填充越大,矩形变得越不准确,并且碰撞总是发生得太低。在使用填充之前,我试图在没有它的情况下进行,这给了我准确的hitRect,但我得到了different bug
提前致谢

1 个答案:

答案 0 :(得分:2)

经过一些试验和错误解决了这个问题。显然填充是添加到矩形,但它在rect.top和rect.bottom之间平均分配,所以解决方案是:

@Override
public void getHitRect(Rect outRect) {
    super.getHitRect(outRect);
    outRect.top+=getPaddingBottom()/2;
    outRect.bottom-=getPaddingBottom()/2;
}

如果你们中的一位Android专家想解释为什么我会感激,因为我不明白它是如何工作的,我只是看不到其中的逻辑。