Перетаскивание изображения? - PullRequest
2 голосов
/ 27 января 2012

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

Вот мои коды:

открытый класс Main extends Activity {

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;

        }
    });

}

}

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Вы можете предоставить проверку в onTouchListener для viewgroup, чтобы подтвердить, что изображение щелкают изначально.

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 голосов
/ 30 января 2012

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

предположим, получим за ImageView, затем

LayoutParam lp = imageView.getLayoutParam();

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

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

imageView.setLayoutParam(lp);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...