0

我试图在用户触摸 imageView 的任何地方放置图钉。假设有一张地图(如谷歌地图),用户触摸了一个点,比如点 A,然后在该点绘制了一个图钉。然后,用户触摸 B 点,然后需要在 B 点绘制另一个引脚(与重新定位的先前引脚不同!),依此类推。现在,我可以在用户触摸屏幕的地方画一个图钉,如下所示:

@Override
public void onDraw(Canvas canvas) {
....
    Bitmap marker = BitmapFactory.decodeResource(getResources(),
            R.drawable.icon_locationmarker);
    canvas.drawBitmap(marker, mLastTouchX, mLastTouchY, null);
.... 
    canvas.restore();
}

但是,我不想在用户触摸的任何地方重新定位屏幕上的一个大头针(这就是上面的代码正在做的事情)。我想在用户触摸的任何地方都放置几个大头针。我是安卓新手。请帮忙。

4

2 回答 2

3

Eluvatar 是对的,您需要创建一个列表来存储您的所有标记。这是代码示例。请记住,当只有motionEvent 是Action_UP 或Action_DOWN 时才添加列表。否则,就会有满分。

public ArrayList<Coordinate> pointsList;

@Override
public void onDraw(Canvas canvas) {
....
    Bitmap marker = BitmapFactory.decodeResource(getResources(),
            R.drawable.icon_locationmarker);
    for(Coordinate coor : pointsList){
        canvas.drawBitmap(marker, coor.x, coor.y, null);
    }

.... 
    canvas.restore();
}

public View.OnTouchListener mListener = new View.OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
            pointsList.add(new Coordinate(event.getX(), event.getY()));
        }

        return false;
    }
};

class Coordinate{
    float x;
    float y;
    public Coordinate(float x, float y){
        this.x = x;
        this.y = y;
    }
}

编辑:将 int x,y 更改为 float x,y

于 2013-09-24T16:43:55.650 回答
2

您需要创建一个“接触点”列表。然后在触摸时向列表中添加一个新的触摸点,然后在 onDraw 中遍历该列表并在每个点上绘制一个标记。

您还需要确保在保存实例状态时保存接触点列表,否则您将在旋转和活动暂停时丢失它们。

于 2013-09-24T16:26:31.170 回答