2012-06-11 50 views
0

我試圖轉移時,在點擊一個圖像按鈕的位置。我嘗試了以下,但它崩潰在「rlOut.addView(imgP,p);」在onCreate()中運行它們時,我沒有任何問題。如何更改的ImageButton的位置時的onClick

公共類Delet3Activity延伸活動{

RelativeLayout rlOut; 
ImageButton imbBtn; 

EditText et1, et2; 
ImageView ivB; 
ImageButton imgP; 
RelativeLayout.LayoutParams p; 
RelativeLayout.LayoutParams params; 

int mX, mY; 

@覆蓋

public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
requestWindowFeature(Window.FEATURE_NO_TITLE); 
setContentView(R.layout.main); 

et1 = (EditText)findViewById(R.id.et1); 
et2 = (EditText)findViewById(R.id.et2); 

imbBtn = (ImageButton)findViewById(R.id.imgBtn); 
rlOut = (RelativeLayout)findViewById(R.id.rlOut); 
imgP = (ImageButton)findViewById(R.id.imgP); 

ivB = new ImageView(this); 
ivB.setBackgroundColor(Color.RED); 

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 

width = width/2-62; 
height = height/2-62; 
p = new RelativeLayout.LayoutParams(62, 62);  

imbBtn.setOnTouchListener(new View.OnTouchListener() { 



    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
     LayoutParams par = (LayoutParams)imbBtn.getLayoutParams(); 

     if(event.getAction()==MotionEvent.ACTION_DOWN) 
     { 
      Log.d("ok","down"); 
      mX = (int) event.getX() - imbBtn.getWidth()/2; 
      mY = (int) event.getY() - imbBtn.getHeight()/2; 
      et1.setText("mX down: "+String.valueOf(mX)); 
      et2.setText("mY down: "+String.valueOf(mY)); 


     } 
     else if (event.getAction()==MotionEvent.ACTION_UP) 
     { 
      Log.d("ok","up"); 
      rlOut.addView(ivB, params); 
      p.leftMargin=4; 
      params.leftMargin = 60; 
      params.topMargin = 20; 
      rlOut.addView(imgP, p); 
      Log.d("ok","p"); 
     } 
     else if (event.getAction()==MotionEvent.ACTION_MOVE) 
     { 
      Log.d("ok","move"); 
      mX = (int) event.getX() - imbBtn.getWidth()/2; 
      mY = (int) event.getY() - imbBtn.getHeight()/2; 
      et1.setText("mX move: "+String.valueOf(mX)); 
      et2.setText("mY move: "+String.valueOf(mY)); 
     } 
     return false; 
    } 
}); 

}}

+0

你必須使用它之前膨脹的觀點。使用類似佈局充氣器的東西。 – user1092042

+0

當你的應用程序崩潰時,在logcat中顯示什麼錯誤,以及你在哪裏聲明瞭視圖變量'rlOut'? –

+0

msg是:threadid = 1:線程退出時出現未捕獲的異常(group = 0x4001e578)warning msg 致命異常:主要 – Amblll

回答

0

OnCreate方法是你設置的setContentView(R.layout.main)的地方。我想變量rlOut代表RelativeLayout這可能是你的主要佈局。調用的OnCreate方法中的上述功能,你設置的內容查看,並有使用findViewById初始化變量rlOut後。或者,如果變量rlOut是在其他一些佈局文件,那麼你將不得不使用吹氣佈局首先是充氣佈局,然後找到使用findViewById方法的看法。

希望這會有所幫助。

編輯

下面的代碼也許應該是你正在尋找的解決方案:

imbBtn.setOnTouchListener(new OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      LayoutParams par = (LayoutParams)imbBtn.getLayoutParams(); 

      if (event.getAction()==MotionEvent.ACTION_MOVE) 
      { 
       Log.d("ok","move"); 
       mX = (int) event.getX() - imbBtn.getWidth()/2; 
       mY = (int) event.getY() - imbBtn.getHeight()/2; 
       par.leftMargin = imbBtn.getLeft() + mX; 
       par.topMargin = imbBtn.getTop() + mY; 
       imbBtn.setLayoutParams(par); 
       et1.setText("mX move: "+String.valueOf(mX)); 
       et2.setText("mY move: "+String.valueOf(mY)); 
      } 
      return false; 
     } 
    }); 

MotionEvent.ACTION_MOVE是需要捕獲的唯一事件。希望這個解決方案對你有幫助。

+0

對不起,我沒有清楚說明,rlOut是RelativeLayout。我不知道什麼是佈局inflater,它是什麼和如何使用它。我會去找出來。 – Amblll

+0

我可以將整個代碼粘貼到佈局通貨膨脹中,但如果您自己搜索/發現它,則可以完整地瞭解該概念。如果您有任何疑問,請復出。 –

+0

我仍然不明白什麼時候使用圖層充氣器,當onClick?另外,我沒有看到如何在圖層充填器之後或之前更改imageButton位置。 – Amblll

相關問題