为什么要使用 setX 和 setY?

Why use setX and setY?

好的,现在我知道这个问题似乎有一个明显的答案,但实际上 setX 和 setY 函数有什么问题,为什么它们不能按预期工作。我正在尝试动态移动视图,而应用 运行 某些 positions.They 在我的带有 mdp 的测试设备上运行良好,但是当我使用具有不同密度的设备时一切都会改变 value.The Y 轴始终关闭按一个常数值,不,这不是填充或边距问题我什至试图将它除以 context.getResources().getDisplayMetrics().density; 考虑到密度差异,但它也没有用。 最后我在这个 post 中使用了答案并且它有效但我仍然有其他密度设备的问题。 这是它的建议:

RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//WRAP_CONTENT param can be FILL_PARENT
params.leftMargin = 206; //XCOORD
params.topMargin = 206; //YCOORD
childView.setLayoutParams(params);

有人能告诉我为什么会这样吗? setX 和 setY 应该让它更容易......对吧?如果我只是说 none 感觉,你可以帮我解决这个问题,我将不胜感激,我最近尝试了一切!

This explains how to convert dp to px programmatically

长话短说:您在 xml 中可以表示为 dp 值的 View 对象上设置的每个数值,在您以编程方式设置它们时都表示为原始像素。以下代码片段告诉您如何将 dp 转换为原始像素:

// The gesture threshold expressed in dp
private static final float GESTURE_THRESHOLD_DP = 16.0f;

// Get the screen's density scale
final float scale = getResources().getDisplayMetrics().density;
// Convert the dps to pixels, based on density scale
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);

// Use mGestureThreshold as a distance in pixels...

希望对您有所帮助!

经过大量研究,我终于解决了这个问题。我所拥有的是一个 GridView 和几个 LinearLayout 都包裹在一个 relativeLayout 中,我使用 getLocationOnScreen() 来获取 gridView 中一个单元格的坐标,这样我就可以在它上面放置视图,由于某种原因,Y 轴始终存在固定值差异,随设备密度的不同而变化,最后我将 GridView 单独放在 relativeLayout 中,因此它是唯一的 child 并使用 getX() getY () 获取视图直接 parent 内的坐标 ,结果正是我想要的,我什至不必计算不同密度的屏幕。 希望这对可能遇到同样问题的人有所帮助。