2011-10-23 60 views
1

我使用API​​ 8編碼。
我需要從視圖中獲取座標X和Y,並將它們設置爲新Button的座標。
我嘗試了不同的方法,但沒有任何作品....Android Api 8.從視圖中獲取x和y,並在按鈕上設置x和y

setX和getX方法只能從api級別11,我需要一種方法來做API8。

這是我的方法,它允許創建一個按鈕,拖動複製(此副本是imageview的,當我把它變成了一個新的按鈕)

public boolean dragCopy(View view, MotionEvent me, Button bt){ 

     int x,y,w,h,id,t,l; 
     int cont=-1; 
     int coord[] = new int[2]; 


     bt2=new Button(this); 


     id = bt.getId(); 
     bt2.setId(id); 

     Resources res = getResources(); 

     cont = FindCont(bt, vector); 

     dr = getLetter(bt, dr, res, vector, cont); 
     w=dr.getIntrinsicWidth(); 
     h=dr.getIntrinsicHeight(); 


     if (me.getAction() == MotionEvent.ACTION_DOWN) { 
      //clicked on the button. DRAG START 
      status = START_DRAGGING; 
      image = new ImageView(this); 

      //set image drawable 
      image.setImageDrawable(dr); 
      image.setPadding((int)bt.getLeft(),(int)bt.getTop(), 0, 0); 
      layout.addView(image, params); 


     } 
     if (me.getAction() == MotionEvent.ACTION_UP) { 

      //button released. DROP 
         status = STOP_DRAGGING; 
      x = (int) me.getRawX(); 
      y = (int) me.getRawY(); 

         //create button compy from image 
      bt2.setBackgroundDrawable(dr); 
      bt2.setVisibility(View.VISIBLE); 

         //PROBLEMS 
      t= image.getTop(); 
      l= image.getLeft(); 
      bt2.setPadding(l, t, 0, 0); 
      System.out.println("**************** T: "+t +"--- L: "+l); 
      image.setVisibility(View.GONE); 
       bt2.setLayoutParams(image.getLayoutParams()); 

       bt2.setWidth(w); 
      bt2.setHeight(h); 

      layout.addView(bt2); 
       bt2.setDrawingCacheEnabled(true); 
      bt2.setOnTouchListener(this); 
      bt2.invalidate(); 
      image.invalidate(); 


     } else if (me.getAction() == MotionEvent.ACTION_MOVE) { 

         //i'm moving the image 
      if (status == START_DRAGGING) { 

       image.setPadding((int) me.getRawX(), (int) me.getRawY(), 0, 0); 
       image.invalidate(); 

      } 
     } 
     return false; 
    } 
+0

只是好奇,爲什麼你需要這樣做?我認爲設置View這樣的位置通常在Android中被忽略,因爲要在所有屏幕上都很難找到它是非常困難的。 – Craigy

+0

我需要模擬沒有爲api提供的拖放監聽器8 – NemoPhobia

+0

我仍然需要一個解決方案,可能不使用自定義佈局,或者如果這是唯一方法,請告訴我 – NemoPhobia

回答

0

我使用andengine重新創建了我的拖放操作。比以前更好,更好

5

你可以試試共達()和getLeft( )?

+0

以及如何設置這個值在按鈕上? – NemoPhobia

5

我沒有試過,但我認爲它會工作:

int buttonX = 50; // Arbitrary values - use whatever you want 
int buttonY = 100; 
int viewX = myView.getLeft(); 
int viewY = myView.getTop(); 

Button newButton = new Button(); 
newButton.setPadding(buttonX - viewX, buttonY - viewY, 0, 0); 
// Other button setup 

這將其設置爲(50,100)在屏幕上的絕對位置。如果你希望它是(50,100)相對於佈局的角落然後使用此:

int buttonX = 50; // Arbitrary values - use whatever you want 
int buttonY = 100; 

Button newButton = new Button(); 
newButton.setPadding(buttonX, buttonY, 0, 0); 
// Other button setup 

這隻會在佈局不自動定位自己孩子的內容,如RelativeLayout的工作。

+0

我有這個錯誤 「方法setTop(int)是未定義的類型按鈕」 – NemoPhobia

+0

哦,你是對的。在setX和setY之前,這也是不可用的。抱歉。 – goto10

+0

我已經更新了我的答案,我認爲這種方法對您有用。 – goto10