我有一个飞机内部的蓝图,它会显示每个座位和区域的相关信息,作为点击的祝酒词。按钮附加到图像本身,因为我希望布局可以缩放和平移,我可以借助
这样做。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);
}
答案 0 :(得分:0)
基本上在你的问题中你需要一个可在你的图像中移动的相机,这样你就可以根据你在android的图像裁剪中使用的完全相同的技术调整矩形,唯一的区别是你不会裁剪图像但是从相机视图
请参阅此stackoverflow问题以获取详细信息 How to create a resizable rectangle with user touch events on Android?