2015-12-10 2 views
1

У меня есть ImageView в моем макете, и я хочу свободно перемещать его везде. Я нашел несколько руководств по перемещению его с помощью действий OnTouchListener (и я сделал свою работу таким образом, но мне это не нравится), и некоторые люди предлагают использовать drag and drop api (Android 3+ api), но я не могу реализовать его в как я хочу (я имею в виду без цели, перетаскивание api хочет цель для перетаскиваемого вида)Move ImageView свободно на экране

может ли кто-нибудь указать пример? (примеры Drag и Drap API)

+0

Вот пример http://thegeekyland.blogspot.com/2015/12/android-animations-explained.html – Arlind

ответ

0
imageiew.setOnTouchListener(new OnTouchListener() { 

    public boolean onTouch(View v, MotionEvent event) { 
     // TODO Auto-generated method stub 
     drag(event, v); 
     return true; 
    } 
}); 

, а затем

 public void drag(MotionEvent event, View v) 
    { 

     RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) v.getLayoutParams(); 

     switch(event.getAction()) 
     { 
      case MotionEvent.ACTION_MOVE: 
      { 
      params.topMargin = (int)event.getRawY() - (v.getHeight()); 
      params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); 
      v.setLayoutParams(params); 
      break; 
      } 
      case MotionEvent.ACTION_UP: 
      { 
      params.topMargin = (int)event.getRawY() - (v.getHeight()); 
      params.leftMargin = (int)event.getRawX() - (v.getWidth()/2); 
      v.setLayoutParams(params); 
      break; 
      } 
      case MotionEvent.ACTION_DOWN: 
      { 
      v.setLayoutParams(params); 
      break; 
      } 
     } 

основе о here

+0

Он хочет «перетащить» пример чувака! @payam –

0

вы можете попробовать это

img.setOnTouchListener(new OnTouchListener() 
{ 
    PointF DownPT = new PointF(); // Record Mouse Position When Pressed Down 
    PointF StartPT = new PointF(); // Record Start Position of 'img' 

    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     int eid = event.getAction(); 
     switch (eid) 
     { 
      case MotionEvent.ACTION_MOVE : 
       PointF mv = new PointF(event.getX() - DownPT.x, event.getY() - DownPT.y); 
       img.setX((int)(StartPT.x+mv.x)); 
       img.setY((int)(StartPT.y+mv.y)); 
       StartPT = new PointF(img.getX(), img.getY()); 
       break; 
      case MotionEvent.ACTION_DOWN : 
       DownPT.x = event.getX(); 
       DownPT.y = event.getY(); 
       StartPT = new PointF(img.getX(), img.getY()); 
       break; 
      case MotionEvent.ACTION_UP : 
       // Nothing have to do 
       break; 
      default : 
       break; 
     } 
     return true; 
    } 
}); 

Я получил его от here

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