2015-02-12 2 views
1

У меня проблема с изображением touch touch. У меня есть два изображения в FrameLayout. Рассмотрим, что оба изображения являются прямоугольными и перекрываются друг с другом.Android ImageView Overlap Touch Issue

  • Image 1 является осязаемым, перетаскивать и подвижный
  • Image 2 не подвижный

Когда я касаюсь область изображения 1, он будет двигаться правильно. Однако, когда я касаюсь области изображения 2, которая перекрывается между изображением 1, это приводит к перемещению изображения 1. Я пытаюсь обнаружить касание Id и Tag, но он все еще говорит, что я касаюсь Image 1

Я хочу предотвратить/ограничить изображение 1 от перемещения при касании области перекрытия изображения 2. Как я могу это достичь? Изображение 2 также может быть пользовательской формой, представлением или холстом.

Я помещаю в XML

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <FrameLayout 
     android:id="@+id/frm" 
     android:layout_width="200dp" 
     android:layout_height="200dp" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imgTest1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:scaleType="matrix" 
      android:tag="img1" 
      android:src="@drawable/a"> 
     </ImageView> 

     <ImageView 
      android:id="@+id/imgTest2" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:scaleType="matrix" 
      android:tag="img2" 
      android:src="@drawable/b"> 
     </ImageView> 
    </FrameLayout> 
</LinearLayout> 

Изображение 1 сенсорный событие

setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (v.getTag() != null && v.getTag().equals("img1")) { 
       ImageView view = (ImageView) v; 

       // Handle touch events here... 
       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
        case MotionEvent.ACTION_DOWN: 
         savedMatrix.set(matrix); 
         start.set(event.getX(), event.getY()); 
         mode = DRAG; 
         lastEvent = null; 
         break; 
        case MotionEvent.ACTION_POINTER_DOWN: 
         oldDist = spacing(event); 
         if (oldDist > 10f) { 
          savedMatrix.set(matrix); 
          midPoint(mid, event); 
          mode = ZOOM; 
         } 
         lastEvent = new float[4]; 
         lastEvent[0] = event.getX(0); 
         lastEvent[1] = event.getX(1); 
         lastEvent[2] = event.getY(0); 
         lastEvent[3] = event.getY(1); 
         d = rotation(event); 
         break; 
        case MotionEvent.ACTION_UP: 
        case MotionEvent.ACTION_POINTER_UP: 
         mode = NONE; 
         lastEvent = null; 
         break; 
        case MotionEvent.ACTION_MOVE: 
         if (mode == DRAG) { 
          // ... 
          matrix.set(savedMatrix); 
          matrix.postTranslate(event.getX() - start.x, event.getY() 
            - start.y); 
         } else if (mode == ZOOM && event.getPointerCount() == 2) { 
          float newDist = spacing(event); 
          matrix.set(savedMatrix); 
          if (newDist > 10f) { 
           float scale = newDist/oldDist; 
           matrix.postScale(scale, scale, mid.x, mid.y); 
          } 
          if (lastEvent != null) { 
           newRot = rotation(event); 
           float r = newRot - d; 
           matrix.postRotate(r, view.getMeasuredWidth()/2, 
             view.getMeasuredHeight()/2); 
          } 
         } 
         break; 
       } 

       view.setImageMatrix(matrix); 

       return true; 
      } 
      else 
       return false; 
     } 
    }); 

Спасибо.

+0

Можете ли вы добавить код? –

+0

Привет Андреас. Я добавил код – bearcoder

+0

Вы говорите, что изображение 2 не движется. Это осязаемо? –

ответ

1

Я считаю, что проблема здесь:

if (v.getTag() != null && v.getTag().equals("img1")) { 
      ImageView view = (ImageView) v; 

Вы проверяете, если тег зрения равно img1, а затем делать свою работу. Однако я не вижу нигде, что вы проверяете, соответствует ли представление img2 (как указано в вашем xml).

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

else if (v.getTag() != null && v.getTag().equals("img2")) { 
    //do work here   
} 
+0

Привет, Андреас. Я не хочу перемещать изображение 2. Он должен всегда оставаться перед изображением 1. Представьте, что изображение 1 - это моя настоящая фотография, а изображение 2 - рамка с прозрачным прямоугольником в центре. Я хочу ограничить изображение 1 только его видимой областью. Например, прикосновение к рамке рамки прямоугольника не должно перемещать изображение 1. Есть ли лучший способ сделать это? Извините за мой плохой английский. – bearcoder

+0

Вы пытались создать свой img2 в своем xml перед созданием img1? Этот путь поставит img2 в спину и img1 впереди. Дайте мне знать, исправляет ли это это. –

+0

Да. Я следую вашей инструкции. Добавлено событие касания для изображения 2, и оно должно возвращать true. Теперь изображение 2 не перемещается и только перемещает изображение 1 в пределах видимой области. Я не знал, что Android работает так. Спасибо! – bearcoder