好的,现在我知道这个问题似乎有一个明显的答案,但是setX和setY函数到底有什么问题,以及为什么它们不能按预期的那样工作。当应用程序运行到特定的positions.They时,我试图动态地移动视图,它在我的测试设备上使用mdp很好,但是当我使用不同密度的value.The Y轴时,所有的事情都会发生变化。不,这不是一个填充或保证金问题,我甚至试图将它除以context.getResources().getDisplayMetrics().density;,以考虑密度的差异,但它也不起作用。最后,我在这个帖子中使用了这个答案,它起了作用,但我在其他密度设备上仍然存在问题。这就是它所建议的:
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应该把它变成easier...right?如果我只是说没有道理,你可以为我解决这件事,我会非常感激它,我最近尝试了一切!
发布于 2018-10-12 00:41:00
因此,经过大量的研究,我终于解决了这个问题。我所拥有的是一个GridView和几个LinearLayout,它们都封装在一个relativeLayout中,我用gridView获取了GridView中一个单元格的坐标,这样我就可以在它上面放置视图,出于某种原因,Y轴总是有一个固定的值差异,在不同的设备密度下,最终把GridView放在一个relativeLayout中,所以它是唯一的子程序,并且使用getX() getY()来获取视图的直链内部的坐标,结果就是我想要的结果,我甚至不需要计算不同的密度屏幕。希望这对可能遇到同样问题的人有所帮助。
发布于 2018-08-03 21:19:10
长话短说:在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...希望这能帮上忙!
https://stackoverflow.com/questions/51680055
复制相似问题