2013-10-07 78 views
2

我想將按鈕移動到另一個觸摸位置。我的意思是,如果用戶觸摸一個按鈕並通過觸摸去另一個地方,該按鈕會移動。我爲其中一個按鈕編寫代碼,但是當我觸摸一個按鈕,三個按鈕移動以及一個按鈕不能移動到右側或左側,並且當我移動到屏幕頂部時,圖像按鈕的一部分被刪除!通過觸摸移動按鈕

什麼問題?我該如何解決這個問題?我想在安卓+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 ...這是你的imageButton或imageView;

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

感謝您的代碼,但再次我的程序有問題:(當我觸摸並嘗試移動到另一個地方時,btnFour與btnOne一起移動(都在一起!!),當我觸摸btnTwo時,btnThree隨此移動(但發生這種事情的第一步之前,我觸摸btnThree和btnFour!),我想當用戶點擊按鈕,顯示另一個活動,我用onClick()方法實現了這一點,但現在與此代碼,onClick()方法不起作用。解決onClick()??謝謝 – SensorS

+0

在你的XML中添加下面的按鈕標籤,你想要點擊的按鈕 android:focusable =「true」 android:focusableInTouchMode =「true」 – Bhavna

+0

另一個問題是當我移動我的按鈕到屏幕的底部或右側,我的按鈕的一部分被刪除,像按鈕的一部分在ImageView下。爲什麼?你有什麼建議嗎? – SensorS