java - Android API 平移/缩放带有 Sprite 覆盖的 ImageView

标签 java android android-imageview

我已经阅读了有关创建 3D 应用程序的 Android 教程和示例。我的目标是创建一个可以显示 2D 图像的应用程序,我可以缩放/平移该图像,并覆盖可以触摸的上下文菜单节点。

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

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

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

我也陷入了 API 10 的困境。任何想法将不胜感激。谢谢。

最佳答案

我相信您必须操纵与图像对齐的节点位置。

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

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

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;
}

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

--已编辑--

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

如果您使用的是 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 坐标。

希望有帮助。

问候。

关于java - Android API 平移/缩放带有 Sprite 覆盖的 ImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13544384/

相关文章:

android - 如何执行 Get Random 从 url 获取图像?

Java - 不带格式的输出数组

android - 如何在 Activity 开始时停止 AlarmManager

android - Robolectric:如何从 Assets 中修复 FileNotFoundException?

java - Vector中排序的实现

android imageView 不喜欢我的 .png 文件

android - Android 中如何避免两个 LinearLayout 相互重叠?

java - Selenide - 如何使用 headless Chrome 运行它?

java - 将 Hazelcast 配置导出到文件

java - 是否可以将内联位图对象添加到通过 JavaMail 发送的电子邮件正文中?