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

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

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

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

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

最佳答案

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

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

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

关于android - 如何在没有填充的情况下在android中获得准确的命中矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23246478/

相关文章:

android - 区分 galaxy S3 和 galaxy Note 的设计布局

android - 无法在 RecyclerView 和 CardView 中查看 Firebase 数据

android - 选择图库图像并转换为位图?

android - 在 Android 中将 ImageView 移动到屏幕中心

Android 谷歌分析不起作用

java - 将回收器 View 置于底部导航上方

java - 使 EditText 不可点击,但仍具有焦点

android - 是否可以改变 RatingBar 的方向?

android - 带选择器的形状,因为颜色不起作用

java - 如何缩短代码