dynamic使用RelativeLayout并设置px,dp,inch,mm的边距

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

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

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

问题是,不知何故图像的像素与RelativeLayout中的像素不匹配! 所以这些项目是“或多或less”的位置,但不在适当的位置(距离(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的可用选项,但我真的不能以编程方式find它,但我可以find指定维度的方式,我的意思是:

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

Solutions Collecting From Web of "dynamic使用RelativeLayout并设置px,dp,inch,mm的边距"

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

 //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是你的应用程序的视图。

请享用。 🙂

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

我find了答案,问题其实与密度,所以我做了:

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

我不太了解它在做什么,但它的工作原理…其实我不明白的价值metrics.density任何解释是值得欢迎的。