0

我一直在阅读有关创建 3D 应用程序的 Android 教程和示例。我的目标是创建一个可以显示 2D 图像的应用程序,我可以使用覆盖的节点进行缩放/平移,这些节点可以被触摸以获取上下文菜单。

我从实现 GLSurfaceView 开始,但切换到实现捏合缩放和平移触摸侦听器的自定义 ImageView。它适用于显示、平移和缩放我的图像。

我现在需要弄清楚如何在图像上的特定坐标处显示节点(可能是图像或精灵),并且当图像被平移/缩放时,让节点相应地移动和缩放。

这是否应该作为主 ImageView 之上的另一个视图来实现?我假设我必须在操作 ImageView 的同时操作节点。

我也坚持使用 API 10。任何想法都将不胜感激。谢谢你。

4

1 回答 1

1

我相信您将不得不操纵与图像对齐的节点位置。

您可以使用下面的代码以编程方式ImageView在布局中的特定位置添加 an(如果需要,还可以强制大小)。

这只是一个示例,并且正在使用固定的可绘制对象(您应该将其更改为作为参数传递给方法)。您还可以更改它移动已经存在的视图而不是添加。

private ImageView addImageView(RelativeLayout mainLayout, int x, int y, int width, int height, OnClickListener onClickListener){
    ImageView imageView = new ImageView(this);
    imageView.setAdjustViewBounds(false);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.height = height;
    params.width = width;
    imageView.setLayoutParams(params);
    imageView.setScaleType(ImageView.ScaleType.FIT_XY);
    imageView.setImageDrawable(getResources().getDrawable(R.drawable.marker_red));
    //imageView.setBackgroundColor(Color.BLUE);
    params.leftMargin = x - width/2;
    params.topMargin = y - height/2;
    imageView.setOnClickListener(onClickListener);
    mainLayout.addView(imageView);
    return imageView;
}

如果您需要更多详细信息,请告诉我。

--已编辑--

要在父布局中获得位置,您可以使用getX()并且getY()如果您使用的是 API 11 或更高版本。

如果您使用的是 API < 11,那么您可以使用以下方法获取原始位置(在屏幕内):

private boolean inViewBounds(View view, int x, int y){
    view.getDrawingRect(outRect);
    view.getLocationOnScreen(location);
    outRect.offset(location[0], location[1]);
    return outRect.contains(x, y);
}

并且您需要将父布局原始坐标减去相对于父级的 obation 坐标。

希望能帮助到你。

问候。

于 2012-11-24T19:07:22.253 回答