我正在尝试动态创建,然后在Android活动中移动图像。然而,setX()和setY()方法似乎不能正常工作。它在第一次创建和放置图像时正确地设置了图像的位置,但是任何更新它的尝试都会导致图像被放置在错误的位置。例如,图像沿着以下代码移动:
ImageView image;
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this);
if(action == MotionEvent.ACTION_DOWN){
image = new ImageView(MyClass.this);
layout.addView(image, width, height);
image.setX(206);
image.setY(206);
}
else if(action == MotionEvent.ACTION_MOVE){
if(image != null){
image.setX(206);
image.setY(206);
}
}
在ACTION_MOVE上,图像被移动,即使x和y位置值保持不变。图像的父元素保持不变。大小保持不变。如果我得到x和y值,它仍然会说206,但它不再被放置在(206,206)的活动了。我不知道为什么会发生这种事。我找不到任何改变图像的迹象,除了物理位置改变。
真的,这不应该发生。或者,尝试设置另一个变量并为其设置x和y,或者获取x和获取y并为相同位置的每个变量添加一个0。
正如Android -在api 8中使用view.setX()和setY所述,如果你已经搜索过,还有另一个解决方案,甚至在api 8之前也有效。LayoutParams
是这样工作的-
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);
那里有更多的信息。我希望这对你有帮助
遇到同样的问题。View.setLeft(int)/View.setTop(int)
为我工作。
请注意,自从这个答案的原始帖子改变了,在最近的android版本上,它可能会产生意想不到的结果,而它对我在旧版本上的技巧。因此,如果你的目标是旧设备(android 3.0及以下),这可能会有所帮助,但对于更通用的解决方案,请考虑其他答案。
从文档中,setTranslationX是:
设置此视图相对于其左侧位置的水平位置。这有效地定位了对象的布局后,除了对象的布局放置它的位置。
setX =
设置此视图的可视x位置(以像素为单位)。这相当于将translationX属性设置为传入的x值与当前left属性之间的差值。
因此,您可以将settransationx视为相对偏移量:在正常位置的左侧移动3个像素。setX是一个固定的位置:移动你需要的任何东西,这样你最终会在x坐标处绘制您的活动是否处于全屏模式?如果没有,试着让它全屏,它应该解决你的问题。
现在回答有点晚了,但如果其他人也面临同样的问题。这为我修复了它,它是布局文件中的填充:
android:paddingBottom="16dp"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="16dp"
作为实际面临这个问题的人,我通过删除parentView中的任何填充来解决这个问题。