Android API平移/缩放带有精灵覆盖的ImageView

时间:2012-11-24 18:47:03

标签: java android android-imageview

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

我开始实现GLSurfaceView,但切换到自定义ImageView,实现了一个缩放到缩放和平移触摸监听器。它适用于显示,平移和缩放图像。

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

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

我也坚持使用API​​ 10.任何想法都会非常感激。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

这只是一个例子,并且正在使用一个固定的drawable(你应该改变它作为参数传递给方法)。您也可以更改它移动已存在的视图而不是添加。

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坐标。

希望它有所帮助。

问候。