获取Imageview不同区域的特定像素参数?

时间:2016-11-03 07:19:07

标签: android imageview clickable

我有一个飞机内部的蓝图,它会显示每个座位和区域的相关信息,作为点击的祝酒词。按钮附加到图像本身,因为我希望布局可以缩放和平移,我可以借助

这样做。

https://github.com/Lukle/ClickableAreasImages

但是,由于我们定义可点击区域的方法采用以下格式进行硬编码(如上面链接中详细介绍的那样):

// Define your clickable areas
// parameter values (pixels): (x coordinate, y coordinate, width, height) and assign an object to it

        clickableAreas.add(new ClickableArea(500, 200, 125, 200, new Character("Homer", "Simpson")));
        clickableAreas.add(new ClickableArea(600, 440, 130, 160, new Character("Bart", "Simpson")));  

这种方法要求我知道可点击区域的确切x,y坐标和宽度和高度,这对我来说是一个很大的挑战,因为我的应用程序所需的一个重要方面是可点击性的准确性,因为可点击区域众多在图像视图中。

因此,我的问题是,有没有办法通过layout.xml选项卡或其他任何我可以绘制区域并提取其相应的x,y坐标以及每个可点击区域的宽度和高度的方法?

非常感谢任何帮助!

编辑: 在建议的https://stackoverflow.com/a/17807469/7034521的帮助下,我能够在将DrawView代码附加到我的线性布局后进行裁剪以找到坐标。 但是,当在ClickableAreasImages中使用坐标时,裁剪区域的坐标与可点击区域不对应。我确保将我的线性布局和imageview的宽度和高度都设置为' fill_parent'所以我不确定是什么错。以下是我认为可能与我的项目相关的一些附加代码:

在DrawView下(将以下部分添加到https://stackoverflow.com/a/17807469/7034521):

 case MotionEvent.ACTION_UP:
                while (isNotPrinted) {

                    int x = colorballs.get(0).getX();
                    int y = colorballs.get(0).getY();
                    int width = colorballs.get(2).getX() - colorballs.get(0).getX();
                    int height = colorballs.get(1).getY() - colorballs.get(0).getY();
                    Log.i("x, y, width, height:",Integer.toString(x) + ", " + Integer.toString(y) +
                            ", "+ Integer.toString(width) + ", "+Integer.toString(height) );
                    isNotPrinted = false;
                }

                break;

activity.xml:

<ImageView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/imageView3"
    android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
    android:src="@drawable/b777_212b_1" />

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:id="@+id/myLinearLayout"
    android:layout_alignRight="@+id/imageView3"
    android:layout_alignEnd="@+id/imageView3"></LinearLayout>

activity.java:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_coordinates_tester);


        LinearLayout layout = (LinearLayout) findViewById(R.id.myLinearLayout);
        DrawView myView = new DrawView(this);
        myView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
        // myView.setText("Added myView");
        layout.addView(myView);

        // Add image
        ImageView image = (ImageView) findViewById(R.id.imageView3);
        image.setImageResource(R.drawable.b777_212b_1);

    }

1 个答案:

答案 0 :(得分:0)

基本上在你的问题中你需要一个可在你的图像中移动的相机,这样你就可以根据你在android的图像裁剪中使用的完全相同的技术调整矩形,唯一的区别是你不会裁剪图像但是从相机视图

请参阅此stackoverflow问题以获取详细信息 How to create a resizable rectangle with user touch events on Android?