我有一个HorizontalScrollView,我在ImageView元素中显示图像。在ImageView上,我想在覆盖的RelativeLayout中绘制多个ImageButton。按钮是动态创建的。请参阅以下代码:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_indoor_tour"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#AAFF0000"
>
<ImageView
android:id="@+id/scene"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:contentDescription="@string/indoor_tour_scene_view"
android:adjustViewBounds="true"
>
</ImageView>
<RelativeLayout
android:id="@+id/coordinate_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<!-- Mapstops will be added programmatically -->
</RelativeLayout>
</RelativeLayout>
</HorizontalScrollView>
</FrameLayout>
和
private void showCoordinate(Coordinate coordinate) {
ImageButton stop = new ImageButton(coordinateContainer.getContext());
stop.setImageResource(R.drawable.map_marker_icon_red_small);
stop.setId((int)coordinate.getId());
int a = sceneView.getHeight();
int b = sceneView.getDrawable().getIntrinsicHeight();
float z = (float)b/a;
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
float x = coordinate.getX();
float y = coordinate.getY();
int left = (int)(coordinate.getX() / z);
int top = (int)(coordinate.getY() / z);
params.setMargins(left, top, 0, 0);
stop.setLayoutParams(params);
coordinateContainer.addView(stop);
}
Coordinate类类似于Point。
一般情况下它可以工作,但问题是在绘制按钮的地方不正确。 例如,我有一个图像将显示在ImageView中,其原始大小为 1600 x 900(w x h)。 ImageView中的大小将是动态的,因为它取决于屏幕大小(完整片段大小),在我的示例中 2112 x 1584 。
所以我计算了ImageView / Original的比率,在这个例子中是~0.568。 要将坐标x-y像素值转换为显示的图像大小,我将此比率用于x和y。此示例中的值适用于实际原始 x = 829 和 y = 69 。 绘制按钮的值是 x = 1459 和 y = 121 。
小圆角增量当然是可以预期的,但是我的按钮显示的差异远离应该绘制的位置几百个像素。
那我的错误在哪里? 我的计算是否正确? 在这里使用LayoutParams.setMargins()是否正确?文档用像素表示。