2010-11-12 59 views
2

在這裏,我創建了一個dragable ImageView的。這是我的示例代碼(沒有給出完整的代碼)的Android拖放

public class mainClass extends Activity 
{  
    MyView obj1,obj2; 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 

     AbsoluteLayout layout = new AbsoluteLayout(LearnKid.this); 

     layout.setLayoutParams(new AbsoluteLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, 
         LayoutParams.WRAP_CONTENT,0,0)); 
     obj1 = new MyView(this); 
     obj2 = new MyView(this); 

     layout.addView(obj1); 
     layout.addView(obj2); 

     setContentView(layout); 

    } 
} 
class MyView extends ImageView 
{ 
    public MyView(Context context) 
    { 

      super(context); 
    } 
    public boolean dispatchTouchEvent(MotionEvent event) 
    { 
     center_X= (int)event.getRawX(); 
     center_Y = (int)event.getRawY(); 
     this.setLayoutParams(new AbsoluteLayout.LayoutParams(AbsoluteLayout.LayoutParams.WRAP_CONTENT, 
        AbsoluteLayout.LayoutParams.WRAP_CONTENT,center_X-10,center_Y-(70))); 
    } 
} 

在這裏,我得到2個獨立的imageviews也很dragable。 但我如何檢查第一張圖像是否已經越過了第二張圖像。 因爲那時我想停止拖動選項。

plz幫助

thanx提前....

回答

1

我將爲此提供初始邏輯。您必須獲得您正在檢查的項目的位置,並比較您的拖動項目x或y座標(或兩者取決於您想實現的目標)是否已通過第二項x和/或y座標。您需要對笛卡爾座標系有一個基本的瞭解。

這可以在拖動邏輯實現,或當你釋放對象(從它採取的手指)。

現在只是爲了清除其他的東西。您有使用AbsoluteLayout的特殊原因嗎?如果不是,那麼請不要使用它,因爲它已被棄用,並且不鼓勵它的使用。

+0

ya..i嘗試了上面的邏輯,只有當第二視圖經過精確also.It將檢查座標。這不會給予拖放的全部效果,所以我沒有使用................... 作爲絕對佈局的情況下,我想定位視圖在啓動期間的特定位置 是他們的另一種方式..? thanx您sugestion ... – Antony 2010-11-12 08:10:58

+0

@Antony我很抱歉,但我不明白爲什麼它是行不通的。看起來你嘗試過的邏輯不正確。 – 2010-11-12 08:14:08

1

AABB軸對齊包圍盒

要更新的位置和箱每次

被拖到你測試,如果它們重疊

你可以嘗試並適應這個

axmin = gofd.getPosition().x-gofd.getObjectSize().x/2f; 
    axmax = gofd.getPosition().x+gofd.getObjectSize().x/2f; 
    aymin = gofd.getPosition().y-gofd.getObjectSize().y/2f; 
    aymax = gofd.getPosition().y+gofd.getObjectSize().y/2f; 
    Enumeration<Integer> e2 = myHash.getKeys(); 
    while(e2. hasMoreElements()){ 
     GameObject toDraw = myHash.getGameObjectForID(e2.nextElement()); 
     if(toDraw != null){ 
      bymax = toDraw.getPosition().y+toDraw.getObjectSize().y/2f; 
       bymin = toDraw.getPosition().y-toDraw.getObjectSize().y/2f; 
       bxmin = toDraw.getPosition().x-toDraw.getObjectSize().x/2f; 
       bxmax = toDraw.getPosition().x+toDraw.getObjectSize().x/2f; 
       if(!(axmax<bxmin || bxmax <axmin || aymax<bymin || bymax <aymin)){ 
        return true; 
       } 
      } 
     } 
    } 

gofd =遊戲對象手指拖動

這是我遊戲舊版本的代碼片段

的myHash包含對圖像的參考datastrucutre我用,但它不應該不遠了你所需要的

+0

Thanx frnd ....它看起來太複雜了...但我會嘗試這個邏輯 – Antony 2010-11-12 08:24:16

+0

LOL我給你最廣泛的情況代碼^^我測試的對象拖動對所有其他人。如果你使用2D盒子,你不能簡化它。第1-4行計算被拖動的方框線5-8的所有其他對象線的邊線第9-12行計算另一個對象線的邊線13測試 – 2010-11-12 08:33:36