2012-01-27 4 views
2

Я пытаюсь сделать какое-то приложение, которое нужно разблокировать, когда пользователь перемещает изображение в определенное место ... Но проблема в том, что пользователь прикасается куда-то еще, кроме изображения, он все еще пытается переместиться, и он дает эту ошибку: java.lang.ClassCastException: android.widget.AbsoluteLayout $ LayoutParamsПеретаскивание изображения?

Вот мои коды:

общественный класс Main расширяет активность {

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

+0

Существует маленькое изображение на экране, и пользователь перетаскивает его в определенное место на экране, а затем появляется другая страница ... Это своего рода проблема блокировки. Поэтому он не должен быть такого же размера с экраном:/ – yahya

+0

, пожалуйста, отправьте logcat .. –

ответ

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

первая вещь, не создавать новые объективистские т из LayoutParam просто получить LayoutParam объект из контейнера, как изображение или макет

предполагать получение для ImageView затем

LayoutParam lp = imageView.getLayoutParam(); 

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

Теперь изменить размер и установить его в imageView.setLayoutParam()

imageView.setLayoutParam(lp); 

и другое вещь, вы также установили сенсорный прослушиватель для ViewGroup, только что установленный для ImageView, не установлен сенсорный прослушиватель для ViewGroup и в приложении приемника прикосновений возвратите true, чтобы указать, что прослушиватель касания был реализован.

+0

Не могли бы вы проверить мой ответ? :) – yahya

Смежные вопросы