Программно выполнить другое событие касания, когда в Android происходит одно событие касания

Я делаю перетаскивание ImageView с созданием дубликата экземпляра, касаясь исходного.

У меня есть один горизонтальный макет, содержащий много маленьких изображений. когда я прикасаюсь к нему, он создает его дубликат и помещает в эту позицию на экране немного по-другому.

Теперь я хочу продолжить событие касания, но хочу завершить первое событие касания, выполненное в исходном ImageView, и хочу запустить событие касания его дублирующего экземпляра. но без снятия пальца вверх.

Я сделал следующее:

img22.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        ImageView img2 = null;

        switch (event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN :
...   ...
...   ...
            Bitmap bmp2 = BitmapFactory.decodeResource(ImageListActivity.this.getResources(),
                R.drawable.img2);
            //ImageView 
            img2 = new ImageView(ImageListActivity.this);
            img2.setImageBitmap(bmp2);
            img2Param.setMargins( (rx-10-x), (ry-10-y-50), 0, 0);
            img2.setLayoutParams(img2Param);

            img2.setOnTouchListener(new OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {


                    System.out.println("   ---   img2 On Touch Called   ---");

                    RelativeLayout.LayoutParams img2Param =
                    (RelativeLayout.LayoutParams) v.getLayoutParams();
                    img2Param.setMargins((int)event.getRawX()-10, (int)event.getRawY()-60, 0, 0);
                    v.setLayoutParams(img2Param);
                    v.invalidate();
                        return true;
                    }
                });
            long downTime2 = SystemClock.currentThreadTimeMillis(),
                    eventTime2 = SystemClock.currentThreadTimeMillis() + 10;
            float x2 = 0.0f, y2 = 0.0f;
            int metaState2 = 0;
            MotionEvent motionEvent2 = MotionEvent.obtain(
                    downTime2, eventTime2, MotionEvent.ACTION_POINTER_1_UP, x2, y2, 1);
            v.dispatchTouchEvent(motionEvent2);

            long downTime = SystemClock.currentThreadTimeMillis(),
                    eventTime = SystemClock.currentThreadTimeMillis();// + 5000;
            float x1 = 0.0f, y1 = 0.0f;
                int metaState = 0;
            MotionEvent motionEvent = MotionEvent.obtain(
                    downTime, eventTime, MotionEvent.ACTION_MOVE, x1, y1, 1);
            img2.onTouchEvent(motionEvent);
...    ...
...    ...

Может ли кто-нибудь дать мне представление о продолжении события касания и изменении экземпляра ImageView.


person Chintan Raghwani    schedule 09.11.2012    source источник
comment
На этот вопрос был дан ответ в следующем разделе [Обнаружение события касания в представлении при перетаскивании из другого представления] [1]. С уважением [1]: stackoverflow.com/questions/12980156/   -  person Luis    schedule 22.11.2012
comment
Да, Луис, я назначил награду за этот вопрос, и ты понял, я это знаю.. Но это не то же самое, что это.   -  person Chintan Raghwani    schedule 22.11.2012


Ответы (2)


Похоже, что вы хотите сделать, это щелкнуть «Изображение1», создать ли это действие «Изображение2» и продолжить жест касания, как если бы он был нажат на «Изображение2»?

Вместо этого может быть лучше иметь сенсорную поверхность — невидимое представление, расположенное над этими представлениями, которое фиксирует событие касания, а затем выполняет действия по мере необходимости — это будет означать, что вы можете продолжать свой жест «вне» изображения без создание нового жеста.

person Graeme    schedule 09.11.2012

Если я правильно понимаю проблему, вам нужно вернуть false в методе img2 onTouch, чтобы вернуть касание диспетчеру (img22).

person Phil    schedule 19.11.2012