0

ユーザーがimageViewに触れる場所にピンを配置しようとしています。地図 (Google マップなど) を想定し、ユーザーがポイント 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();
}

ただし、ユーザーがタッチした場所に 1 つのピンを画面全体に再配置したくはありません (上記のコードが行っていることです)。ユーザーが触れるすべてのポイントに複数のピンを配置したい。Androidが初めてです。助けてください。

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

「タッチポイント」のリストを作成する必要があります。次に、on touch で新しいタッチ ポイントをリストに追加し、onDraw でそのリストを反復処理して、各ポイントにマーカーを描画します。

また、インスタンスの状態を保存するときにタッチ ポイントのリストを保存する必要があります。そうしないと、回転時やアクティビティの一時停止時にそれらが失われます。

于 2013-09-24T16:26:31.170 に答える