2015-01-05 3 views
0

Я создал метод изменения положения ImageView, основанный на позиции другого изображения.Android - метод неоднократно не подвергается

public void move(double zx, double zy) { 

    RelativeLayout.LayoutParams params = 
      new RelativeLayout.LayoutParams(80,80); 

    // the imageView s was initialized in the onCreate() 


    System.out.println("working"); 


    if (zx < s.getLeft()) { 
     if (s.getLeft() - zx > 0) { 
      params.leftMargin = s.getLeft() -1; 
     } else 
      params.leftMargin = s.getLeft() +1; 
    } 
    if (zx > s.getLeft()) { 
     if (s.getLeft() - zx > 0) { 
      params.leftMargin = s.getLeft() -1; 
     } else 
      params.leftMargin = s.getLeft() +1; 
    } 
    if (zy > s.getTop()) { 
     if (s.getTop() - zy > 0) { 
      params.topMargin = s.getTop() -1; 
     } else 
      params.topMargin = s.getTop() + 1; 
    } 
    if (zy < (int)s.getY()) { 
     if ((int)s.getY() - zy > 0) { 
      params.topMargin = s.getTop() -1; 
     } else 
      params.topMargin = s.getTop() + 1; 
    } 

    s.setLayoutParams(params); 
} 

Тогда я позвонил в OnCreate()

protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_fase); 

    s = (ImageView)findViewById(R.id.s); 
    box = (ImageView)findViewById(R.id.box); 

    move(box.getLeft(),box.getTop()); 

    } 

сообщение "работает" был напечатан, но только один раз. Позиция изображения также не изменилась. Мое заключение заключается в том, что метод не выполнялся повторно. В противном случае позиция imageView будет меняться каждый раз, и сообщение «работа» появится каждый момент. Как я могу это решить? Должен ли я вызвать метод в другом классе? Я попытался вызвать его в timertask и выполнить timertask каждый milisecond, но приложение просто остановилось.

команда Drag для других ImageView (внутри OnCreate):

 box.setOnTouchListener(new View.OnTouchListener() { 

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

      switch(event.getAction()) 
      { 
       case MotionEvent.ACTION_DOWN: 
        break; 
       case MotionEvent.ACTION_MOVE: 
        System.out.println(box.getLeft()); 
        int x_cord = (int)event.getRawX(); 
        int y_cord = (int)event.getRawY(); 

        if(x_cord>windowwidth){x_cord=windowwidth;} 
        if(y_cord>windowheight){y_cord=windowheight;} 

        layoutParams.leftMargin = x_cord - 250; 
        layoutParams.topMargin = y_cord - 300; 

        box.setLayoutParams(layoutParams); 
        break; 
       default: 
        break; 
      } 
      return true; 
     } 
    }); 
+1

Почему вы думаете, что этот метод нужно называть повторно? – njzk2

ответ

0

Во-первых, вы никогда не говорили программу, чтобы выполнить ваш метод более move, чем один раз, когда onCreate называется. Второй timertask each milisecond .. Я думаю, что это будет способ многого выполнения move 1000 раз в секунду .. и третий с помощью timertask может привести к множеству проблем, вы можете использовать, например, handler.

Посмотрите на это, это покажет вам, как реализовать handler for repeating Tasks!

+0

Я работал с обработчиком, но результат был неожиданным. ImageView переместился, но только когда я перетаскивал другой imageView! Просто для теста я написал «params.topMargin ++» в runnable, и изначально imageView не двигался, но когда я начал перетаскивать другой ImageView, он начал работать! И когда я перестал перетаскивать, другое изображениеView также перестало двигаться. Я добавлю команду перетаскивания к вопросу. – Danilo