我一直在浏览有关创建3D应用程序的Android教程和示例。我的目标是创建一个应用程序,我可以显示一个2D图像,我可以使用覆盖的节点进行缩放/平移,可以触摸上下文菜单。
我开始实现GLSurfaceView,但切换到自定义ImageView,实现了一个缩放到缩放和平移触摸监听器。它适用于显示,平移和缩放图像。
我现在需要弄清楚如何在图像上的特定坐标处显示节点(可能是图像或精灵),并且当图像被平移/缩放时,让节点移动并相应地缩放。
这应该作为主ImageView顶部的另一个View实现吗?我假设我必须在操纵ImageView的同时操纵节点。
我也坚持使用API 10.任何想法都会非常感激。谢谢。
答案 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坐标。
希望它有所帮助。
问候。