2012-01-27 148 views
2

我試圖做一些應用程序,當用戶將圖像移動到某個地方時必須解鎖...但問題是當用戶觸摸除圖像之外的其他地方時,它仍會嘗試移動並出現此錯誤: java.lang.ClassCastException:android.widget.AbsoluteLayout $的LayoutParams拖動圖像?

這裏是我的代碼:

公共類主要擴展活動{

private View selected_item; 
private int offset_x = 0; 
private int offset_y = 0; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final ViewGroup vg = (ViewGroup) findViewById(R.id.lout); 

    vg.setOnTouchListener(new View.OnTouchListener() { 

     @SuppressWarnings("deprecation") 
     public boolean onTouch(View v, MotionEvent event) { 
         switch (event.getAction()) {       
         case MotionEvent.ACTION_MOVE: 
          int x = (int) event.getX() - offset_x; 
          int y = (int) event.getY() - offset_y; 
          Log.e("SONUC", "SONUC1: " + x + ", " + y); 
          int w = getWindowManager().getDefaultDisplay().getWidth() - 25; 
          int h = getWindowManager().getDefaultDisplay().getHeight() - 25; 
          if (x > w) 
           x = w; 
          if (y > h) 
           y = h; 
          Log.e("SONUC", "SONUC2: " + x + ", " + y); 
          AbsoluteLayout.LayoutParams lp = new AbsoluteLayout.LayoutParams(
            new ViewGroup.MarginLayoutParams(
              AbsoluteLayout.LayoutParams.WRAP_CONTENT, 
              AbsoluteLayout.LayoutParams.WRAP_CONTENT));        
          lp.x = x; 
          lp.y = y; 
          Log.e("SONUC", "SONUC3: " + lp); 
          selected_item.setLayoutParams(lp);  

          break; 

         case MotionEvent.ACTION_UP: 
          offset_x = (int) event.getX() - offset_x; 
          offset_y = (int) event.getY() - offset_y; 
          Log.e("SONUC", "SONUC5: " + offset_x + ", " + offset_y); 
          selected_item = v; 
          if (offset_x < 220 && offset_x > 150 && offset_y < 330 && offset_y > 300) 
           startActivity(new Intent("com.yahya.GeneralTraining.UNLOCKED")); 
          break; 

      default: 
       break; 
      } 
      return true; 
     } 
    }); 

    ImageView img = (ImageView) findViewById(R.id.imageView1); 
    img.setOnTouchListener(new View.OnTouchListener() { 

     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 
       offset_x = (int) event.getX(); 
       offset_y = (int) event.getY(); 
       Log.e("SONUC", "SONUC4: " + offset_x + ", " + offset_y);      
       selected_item = v; 
       break; 


      default: 
       break; 
      } 
      return false; 

     } 
    }); 

} 

}

+0

設定圖像容器尺寸相同的圖像尺寸如果圖像是較小的,則設備屏幕,如果圖像尺寸比設備屏幕較大然後裁剪該圖像或一組圖像作爲全屏 – Pratik 2012-01-27 08:49:15

+0

有一個我的屏幕上有一張小圖片,用戶將它拖到屏幕上的某個位置,然後出現其他頁面......這是一種鎖定問題。所以它不應該與屏幕大小相同:/ – yahya 2012-01-27 09:49:51

+0

請在調試器中發送logcat .. – 2012-01-30 11:40:32

回答

2

您可以在onTouchListener中爲檢查組提供檢查,以確認最初單擊圖像。

vg.setOnTouchListener(new View.OnTouchListener() { 

    @SuppressWarnings("deprecation") 
    public boolean onTouch(View v, MotionEvent event) { 
       if(selected_item.getId() == R.id.image){ 
        switch (event.getActionMasked()) { 
         //your code 
        } 
       } 
     } 
     return true; 
    } 
}); 
0

1日的事情不創造新objec在LayoutParam的牛逼剛剛得到像圖像容器LayoutParam對象或佈局

假設得到了ImageView然後

LayoutParam lp = imageView.getLayoutParam(); 

lp.width = newWidth; 
lp.height = newHeight; 

現在改變大小,並將其設置在imageView.setLayoutParam()

imageView.setLayoutParam(lp); 

和另一事情是你也設置了ViewGroup的觸摸監聽器,只是爲ImageView設置了未設置的觸摸監聽器並在觸摸監聽器實現中返回true以指示觸摸監聽器已實現

+0

你能檢查我的答案嗎? :) – yahya 2012-01-30 12:45:50