2013-10-07 4 views
2

Я хочу перенести свои кнопки на другой ладонь с прикосновением. Я имею в виду, если пользователь прикасается к одной кнопке и переходит в другое место с помощью касания, кнопка перемещается. Я пишу этот код для одной из кнопок, но когда я касаюсь одной кнопки, три кнопки перемещаются так же, как и одна кнопка не может перемещаться вправо или влево, и когда я перехожу к вершине экрана, часть кнопки изображения удаляется!Перемещение кнопок с помощью Touch

В чем проблема? и как я могу это решить? Я хочу, чтобы запустить эту программу в андроид +2,2

onButton.setOnTouchListener(new OnTouchListener(){ 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      switch(event.getAction()){ 
       case MotionEvent.ACTION_MOVE: 
        RelativeLayout.LayoutParams relativeLayout=(RelativeLayout.LayoutParams) oneButton.getLayoutParams(); 
        int x=(int)event.getRawX(); 
        int y=(int)event.getRawY(); 

        relativeLayout.leftMargin=x-50; 
        relativeLayout.rightMargin=x-50; 
        relativeLayout.topMargin=y-50; 
        relativeLayout.bottomMargin=y-50; 
        oneButton.setLayoutParams(relativeLayout); 
        break; 
        default: 
         break; 
      } 
      return true; 
     } 

    }); 

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<ImageView 
    android:id="@+id/img" 
    android:src="@drawable/root" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:adjustViewBounds="true" 
    android:scaleType="fitXY"/> 
<ImageButton 
    android:id="@+id/btnOne" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="35dip" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="70dip" 
    android:src="@drawable/oneButton" 
    android:background="@null" 
    android:visibility="invisible"/> 
<ImageButton 
    android:id="@+id/btnTwo" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="35dip" 
    android:layout_alignParentTop="true" 
    android:layout_marginTop="70dip" 
    android:src="@drawable/twoButton" 
    android:background="@null" 
    android:visibility="invisible"/> 
    <ImageButton 
    android:id="@+id/btnThree" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/btnOne" 
    android:layout_alignParentLeft="true" 
    android:layout_marginLeft="15dip" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="10dip" 
    android:src="@drawable/ThreeButton" 
    android:background="@null" 
    android:visibility="invisible"/> 
    <ImageButton 
    android:id="@+id/btnFour" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@id/btnTwo" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="15dip" 
    android:layout_alignParentBottom="true" 
    android:layout_marginBottom="10dip" 
    android:src="@drawable/fourButton" 
    android:background="@null" 
    android:visibility="invisible"/> 

</RelativeLayout> 

Спасибо ....

+0

Никто не может помочь мне !! – SensorS

ответ

7

Создайте новый класс, который реализует OnTouchListener

import android.annotation.SuppressLint; 
import android.util.Log; 
import android.view.MotionEvent; 
import android.view.View; 
import android.view.View.OnTouchListener; 
import android.view.ViewGroup.MarginLayoutParams; 
import android.widget.RelativeLayout; 

public class MultiTouchListener implements OnTouchListener 
{ 

private float mPrevX; 
private float mPrevY; 

public MainActivity mainActivity; 
public MultiTouchListener(MainActivity mainActivity1) { 
    mainActivity = mainActivity1; 
} 

@Override 
public boolean onTouch(View view, MotionEvent event) { 
    float currX,currY; 
    int action = event.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: { 

      mPrevX = event.getX(); 
      mPrevY = event.getY(); 
      break; 
     } 

     case MotionEvent.ACTION_MOVE: 
     { 

       currX = event.getRawX(); 
       currY = event.getRawY(); 


       MarginLayoutParams marginParams = new MarginLayoutParams(view.getLayoutParams()); 
       marginParams.setMargins((int)(currX - mPrevX), (int)(currY - mPrevY),0, 0); 
       RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(marginParams); 
       view.setLayoutParams(layoutParams); 


      break; 
     } 



     case MotionEvent.ACTION_CANCEL: 
      break; 

     case MotionEvent.ACTION_UP: 

      break; 
    } 

    return true; 
} 

} 

В настоящее время в ваше основное действие, установите OnTouchListener на свой взгляд ... это ваш образ или изображение;

MultiTouchListener touchListener=new MultiTouchListener(this); 
onButton.setOnTouchListener(touchListener); 
+0

Спасибо за ваш код, но снова у моей программы есть проблема :(Когда я прикасаюсь и пытаюсь переехать в другое место, btnFour move with btnOne (оба вместе !!), и когда я прикасаюсь к btnTwo, btnThree перемещается с этим (но это происходит первым ходом до того, как я коснусь btnThree и btnFour!), и я хочу, когда пользователь нажимает на кнопки, показывает другое действие, я реализовал это с помощью метода onClick(), но теперь с этим кодом метод onClick() не работает. Какой код я добавляю в класс MultiTouchListener для решения onClick() ?? Спасибо – SensorS

+0

Добавьте следующий тег кнопки в свой XML, кнопку, которую вы хотите нажать android: focusable = "true" android: focusableInTouchMode = "true" – Bhavna

+0

и еще одна проблема заключается в том, кнопки в нижней части экрана или справа от экрана, часть моих кнопок, удаленных, как часть кнопок, находится под ImageView. Почему? У вас есть предложение? – SensorS

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