我正在尝试制作地形图应用程序。我一直在学习很多新东西,但我真的在努力学习一些看似简单的事情。
基本上我有一个位图图像,可以通过添加到ImageView子类的一些代码进行缩放和平移。
现在我需要做的是为此图像添加点,这些图像在平移和缩放时保留在位图上。这些点就像谷歌地图上的引脚。我希望能够点击它们来显示信息等,但我甚至无法弄清楚如何开始这样做。
有人可以分享有关如何做到这一点的信息吗?
答案 0 :(得分:1)
这是我的想法:
将您的扩展ImageView
添加到包含所有积分的RelativeLayout
。他们可以
ImageViews
如果您想使用cusom标记(drawables)或View
(覆盖onDraw
并在内部使用canvas.drawCircle(x, y, radius, paint);
绘制一个圆圈),但是您还应该覆盖onMeasure
,即更复杂...... 我认为您的扩展ImageView
类会覆盖onTouch
方法,但您没有发布任何代码,因此上面的草图只显示您要移动的标记所做的事情它们(当然还有地图位图):
private ArrayList<ImageView> points = new ArrayList<ImageView>();
private float dX, dY;
//...
public void addPoint(ImageView point, float x, float y) {
if (points.contains(point)) return; // to avoid duplicates
points.add(point);
((RelativeLayout)getParent()).addView(point, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT));
move(point, x, y);
}
@Override
public boolean onTouch(View view, MotionEvent event) {
switch (event.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
dX = view.getX() - event.getRawX();
dY = view.getY() - event.getRawY();
break;
case MotionEvent.ACTION_MOVE:
for (ImageView p : points) move(p, event.getRawX() + dX, event.getRawY() + dY);
break;
default: return false;
}
return true;
}
private void move(View v, float x, float x) {
v.animate().x(x).y(y).setDuration(0).start();
}
注意: