0

У меня есть ImageView и Button в LinearLayout. Я хочу перетащить ImageView по экрану, но остался Button. Но по какой-то причине, когда я перетаскиваю свой ImageView, он перетаскивает его с помощью Button.Признаки перетаскивания изображения Перетаскивание кнопки

Может кто-нибудь помочь?

Код:

activity_main.xml

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:gravity="center" 
    android:weightSum=10 
    android:id="@+id/main"> 

     <ImageView 
      android:id="@+id/image" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/my_pic" 
      android:layout_weight="2"/> 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_weight="2.5"/> 

     <ImageView 
      android:id="@+id/click" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/btn_click" 
      android:layout_weight="2"/> 

    </LinearLayout> 

MainActivity.java

public class MainActivity extends ActionBarActivity implements View.OnTouchListener 
{ 
    ImageView img; 
    private ViewGroup mRrootLayout; 
    private int _xDelta; 
    private int _yDelta; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mRrootLayout = (ViewGroup) findViewById(R.id.main); 
     img = (ImageView) mRrootLayout.findViewById(R.id.image); 
     LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(300, 300); 

     img.setLayoutParams(layoutParams); 
     img.setOnTouchListener(this); 
    } 

EDIT

public boolean onTouch(View view, MotionEvent event) { 
     switch (view.getId()) { 
      case R.id.logo: 
       final int X = (int) event.getRawX(); 
       final int Y = (int) event.getRawY(); 
       switch (event.getAction() & MotionEvent.ACTION_MASK) { 
        case MotionEvent.ACTION_DOWN: 
         LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) view.getLayoutParams(); 
         _xDelta = X - lParams.leftMargin; 
         _yDelta = Y - lParams.topMargin; 
         break; 
        case MotionEvent.ACTION_UP: 
         break; 
        case MotionEvent.ACTION_POINTER_DOWN: 
         break; 
        case MotionEvent.ACTION_POINTER_UP: 
         break; 
        case MotionEvent.ACTION_MOVE: 
         LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) view 
           .getLayoutParams(); 
         layoutParams.leftMargin = X - _xDelta; 
         layoutParams.topMargin = Y - _yDelta; 
         layoutParams.rightMargin = -250; 
         layoutParams.bottomMargin = -250; 
         view.setLayoutParams(layoutParams); 
         break; 
       } 
       mRrootLayout.invalidate(); 
       break; 

      case R.id.fade: 
       return false; 
     } 

     return true; 
    } 
+0

Ха это правда. Я изменил это. Но возможно ли у вас решение? – user2456977

ответ

0

В на Коснитесь, вы должны проверить, чтобы увидеть, какой вид коснулся, поэтому вы знаете только, чтобы переместить это представление. Например:

public boolean onTouch(View view, MotionEvent event) { 
    switch (view.getId()) { 
     case R.id.image: 

      //Your code goes here 

      break; 
    } 

    return true; 
} 

Таким образом перемещается только вид, на который вы ссылаетесь.

+0

спасибо за ваше предложение. Я редактировал метод onTouch выше, но он дает мне ту же ошибку. Я думаю, проблема заключается в ACTION_MOVE. Возможно, я перерисовываю весь экран каждый раз, когда изображение перемещается, поэтому он также перемещает кнопку. Можете ли вы сказать мне, как изменить его, чтобы только изображение двигалось, а не кнопка? Я застрял на этом какое-то время ... – user2456977

Смежные вопросы