9

我的应用程序只是一个修改后的 ImageViewer,带有缩放和拖动选项。包含修改后的 Imageviewer 有一个 RelativeLayout(我想用作 AbsoluteLayout)。

然后,可以将新元素添加到布局中,以将它们放置在图像的某些点中。元素的像素位置 (x, y) 在数据库中,所以我想没有其他方法可以以编程方式添加它们,而不是使用 XML。

然后每次执行拖动或缩放操作时更新这些元素的位置。

问题是图像的像素与RelativeLayout中的像素不匹配!因此,这些项目“或多或少”位于但不在正确的位置(离 (0,0) 越远,错误越大)。

我已经尝试过的事情:

  • 尝试不同的转换,因为问题可能与位图和布局之间的密度差异有关:

    Resources r = getResources();
    float x = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 100, r.getDisplayMetrics());
    
  • 尝试在布局中使用不同的方法来设置边距:

    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.leftMargin = (int) newPosition.x;
    params.topMargin = (int) newPosition.y;
    element.setLayoutParams(params);
    
  • 我还想使用 XML 中的 RelativeLayout 可用的选项,但我真的无法以编程方式找到它,但我可以找到指定维度的方法,我的意思是:

    android:layout_marginLeft ="50px" // or "50mm", or dp, or inches...
    
4

3 回答 3

20

您可以通过以下代码设置高度、宽度和边距:

//headView
RelativeLayout.LayoutParams head_params = (RelativeLayout.LayoutParams)headView.getLayoutParams();
head_params.setMargins(80, 0, 0, 0); //substitute parameters for left, top, right, bottom
head_params.height = 60; head_params.width = 200;
headView.setLayoutParams(head_params);

其中 headView 是您的应用程序的视图。

于 2012-04-03T11:57:28.133 回答
4

试试这个:对于相对布局,您可以像这样设置边距:params.setMargins(left, top, right, bottom);

于 2011-05-17T05:55:40.857 回答
3

我找到了答案,问题实际上出在密度上,所以我做了:

    DisplayMetrics metrics = getResources().getDisplayMetrics();
    float density = metrics.density;
    //And then I add a new element like: realX*density, realY*density

我不太了解它在做什么,但它确实有效......实际上我不了解价值指标。密度欢迎任何解释。

于 2011-05-17T12:34:23.167 回答