我为Drag and drop
应用程序编写了Android
行为。到目前为止,它完全适用于我的HTC One
和Samsung S3
。基本上,它只是将视图上的leftMargin
和topMargin
设置为移动。
当我在Xperia Arc S
上尝试时,我可以设置topMargin
并垂直移动视图而不会有任何问题。但是一旦我尝试移动它(设置leftMargin
),它就不起作用了。我甚至无法以编程方式设置leftMargin
。
我有一个非常简单的代码,但是我无法找到Xperia
上出现的问题以及为什么它可以在我得到的其他设备上运行。
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;
view.setLayoutParams(params);
如果我显示leftMargin
,display.widthPixels
和viewWidth
的值,我会看到一些看起来不错的东西。 (例如。leftMargin
=介于-100到600之间的任何内容。widthPixels
= 480,此时viewWidth
= 316)。
Xperia
是否有问题或我的代码中是否有错误?
感谢您的宝贵帮助。
编辑:解决方案是(关于Ved Prakash发布)
FrameLayout.LayoutParams paramsOld = (FrameLayout.LayoutParams) view.getLayoutParams();
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(paramsOld.width, paramsOld.height, Gravity.TOP);
params.topMargin = (int) event.getRawY() - view.getHeight();
params.leftMargin = (int) event.getRawX() - (view.getWidth() / 2);
// Set bounds
if (params.topMargin < 0) params.topMargin = 0;
if (params.topMargin + viewHeight * 3/2 > display.heightPixels) params.topMargin = display.heightPixels - viewHeight * 3/2;
if (params.leftMargin < 0) params.leftMargin = 0;
if (params.leftMargin + viewWidth > display.widthPixels) params.leftMargin = display.widthPixels - viewWidth;
view.setLayoutParams(params);
view.invalidate();
答案 0 :(得分:2)
Sony Xperia Arc S - Android 2.3
HTC One - Android 4.1
使用旧版本的android设置布局时出现问题。
答案 1 :(得分:0)
Android 4.4在布局边距方面存在一些问题。所以最好试试:
view.setPadding(left, top, right, bottom);