Horizo​​ntalScrollView

时间:2018-06-18 12:55:21

标签: android imageview overlay imagebutton horizontalscrollview

我有一个Horizo​​ntalScrollView,我在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()是否正确?文档用像素表示。

0 个答案:

没有答案