1

イメージビューをクリック可能にしようとしています。実際にはクリック可能であるため、ユーザーがイメージビューに触れた後にインテントを呼び出すことができます。しかし、タッチで画像を変更するのに苦労しています。

私は次のものが欲しい:

  • デフォルト (タッチなし) : Image1
  • ユーザーがイメージビューにタッチ: image2 に変更
  • ユーザーが指で画像ビューの外に移動: Image1 に戻ります (Intent を呼び出さずに)
  • ユーザーが imageview に触れない: Intent を呼び出し、Image1 に戻る

これらのいくつかは、次のコードで機能しています。

final ImageView v = (ImageView) findViewById(R.id.profileImage);

    v.setOnTouchListener(new OnTouchListener() {
        @Override
        public boolean onTouch(View arg0, MotionEvent arg1) {
            switch (arg1.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                   v.setImageResource(R.drawable.ic_contact_picture_down);

                break;
            }


            case MotionEvent.ACTION_CANCEL:{

                v.setImageResource(R.drawable.ic_contact_picture);
                break;

            }

            case MotionEvent.ACTION_UP: {

                takePhoto();

                v.setImageResource(R.drawable.ic_contact_picture);
                break;
            }

            }
            return true;
        }
    });

画像はタッチすると正しく image2 に変わります。したがって、 ACTION_DOWN が機能しています。ACTION_UP は、ユーザーがイメージビューに触れていない場合に呼び出されます。ただし、アンタッチがイメージビューの外で行われた場合にも呼び出されます。これが発生した場合は、image1 に戻りたいのですが、takePhoto() 関数を呼び出さないでください。ACTION_CANCEL が呼び出されることはありません。これは、上記のケースの候補と考えられます。

4

1 に答える 1

0

Rectaの境界を保持するためにa を使用してから、使用することができImageViewますACTION_MOVE

たとえば、Rectオブジェクトを宣言します。

private Rect rect;

次に、setOnTouchListener()で を初期化し、Rectを使用して確認しますACTION_MOVE

v.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View arg0, MotionEvent arg1) {
        switch (arg1.getAction()) {
          case MotionEvent.ACTION_DOWN: {
            // Declare the bounds of the rect
            rect = new Rect(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());   
            v.setImageResource(R.drawable.ic_contact_picture_down);

            break;
          }

          case MotionEvent.ACTION_MOVE:{
            if(!rect.contains((int)arg1.getX(), (int)arg1.getY())) {
                // Outside the bounds
                v.setImageResource(R.drawable.ic_contact_picture);
            }
            break;        
          }

          case MotionEvent.ACTION_UP: {

            takePhoto();

            v.setImageResource(R.drawable.ic_contact_picture);
            break;
          }
        }
        return true;
    }
});

申し訳ありませんが、これをテストしていませんが、アイデアを得ることができると思います:)

于 2012-06-17T22:26:32.690 に答える