0

私のアクティビティには、ユーザーが画面上を移動できるいくつかの ImageView があります。ユーザーが実際に選択した ImageView を特定するにはどうすればよいですか? Xcode では、各 ImageView に一意のタグを割り当てることができ、onTouch よりもタグ番号を取得できます。Androidにも同様の方法はありますか?

これはXcodeです:

UITouch *touch = [[event allTouches] anyObject];

if ([touch view].tag == 901)
{
    iTouchObject = 901;    
    [self.view bringSubviewToFront:imgRojo1];
}    

これまでに行った Android アクティビティで: onCreate で、各 ImageView に ID を割り当てることができます

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);

onTouch.MOVED では、直接割り当てられた ID で ImageView を使用できます。この場合、画像は画面上の指の下で滑らかに移動します。

    iID = 904;
    ImageView selImage = (ImageView)findViewById(iID); 

しかし、ユーザーが触れた ImageView から ID を取得するにはどうすればよいですか?

私は setOnTouchListener を使用しようとしました:

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);
    selImage.setOnTouchListener(new View.OnTouchListener() {         

        @Override
        public boolean onTouch(View v, MotionEvent event) {
        iID = v.getId();
        ImageView selImage = (ImageView)findViewById(iID); 

        int eventaction = event.getAction();     
        int X = (int)event.getX();
        int Y = (int)event.getY();
        switch (eventaction ) {
        case MotionEvent.ACTION_DOWN: // touch down so check if the finger is on a ball   
             break;
         case MotionEvent.ACTION_MOVE:   // touch drag with the ball 
                // move the balls the same as the finger 
             selImage.setX(X-25);
             selImage.setY(Y-25);
             break;
        case MotionEvent.ACTION_UP: 
                // touch drop - just do things here after dropping
             break;
        }
        // redraw the canvas
        return true;
     }});

これにより、各 ImageView を選択して移動できますが、スムーズに移動せず、ImageView が画面上で複製されます。

onTouch.MOVED の最初のケースでビューを取得し、それを使用して ID を取得することは可能ですか: iID = v.getId();

4

2 に答える 2

1

アップデート:

私は解決策を見つけました。最適化されたものではないかもしれませんが、うまく機能しています。同様の状況で他の人に役立つことを願っています:

ImageView ごとに ID (setID) と setOnTouchListener を割り当てています。setOnTouchListener で行っている唯一のことは、ID に使用したのと同じ番号を整数に割り当てることです。重要なのは、RETURN FALSE を設定することです。これにより、setOnTouchListener が停止します。

    ImageView selImage = (ImageView)findViewById(R.id.i904); 
    selImage.setId(904);
    selImage.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
        iID = 904;
            return false;
        }
    });

次の onTouchEvent() を追加しました。ここで最初に行うことは、以前に整数で設定された ID を持つ ImageView を選択することです。

public boolean onTouchEvent(MotionEvent event) {
    ImageView selImage = (ImageView)findViewById(iID); 
        int eventaction = event.getAction();     
        int X = (int)event.getX();
        int Y = (int)event.getY();
        switch (eventaction ) {
        case MotionEvent.ACTION_DOWN:   
             break;
         case MotionEvent.ACTION_MOVE:    
             selImage.setX(X-25);
             selImage.setY(Y-25);
             break;
        case MotionEvent.ACTION_UP: 
             break;
        }
        return true;
     }

これで、任意の ImageView に触れて、画面上で移動できます。それが役に立てば幸い!

于 2013-05-13T23:21:58.027 に答える