当前位置: 移动技术网 > IT编程>移动开发>Android > Android实现View的拖拽

Android实现View的拖拽

2020年06月18日  | 移动技术网IT编程  | 我要评论

四路视频服务器,寻剑奇情,翟鸿深

本文实例为大家分享了android实现view拖拽的具体代码,供大家参考,具体内容如下

前言

实现view的拖拽,其实原理很简单。无非就是获取手指的位移信息,然后view根据手指的位移信息,移动对应的位置。

首先是获取手机的位移信息就可以根据需求不同分为两种

  • 拖拽view本身,view实现移动。则设置view的setontouchlistener。
  • 在activity中随意滑动,view都会反应出动作。则重写activity ontouchevent方法。

而移动的方法嘛,也有几种

  • 给view设置补间动画,动画时间为0.(不推荐,因为移动的只是view的影子,本地还在原地)
  • 更改view 的margin。(不推荐,会影响viewgroup的布局排布)
  • 根据属性动画原理,更改settranslationx和settranslationy.(推荐此方法,不会影响原理的布局排布)

代码

public class viewtestactivity extends appcompatactivity {
  private static final string tag = "viewtestactivity";
  private textview mtv1,mtv2;
  private double lastx,lasty;
  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_view_test);
    mtv1= (textview) findviewbyid(r.id.tv01);
    mtv1.setontouchlistener(new view.ontouchlistener() {
      @override
      public boolean ontouch(view v, motionevent event) {
        double x=event.getrawx();
        double y=event.getrawy();
        log.d(tag, "ontouch: "+event.getaction());
        if (event.getaction()==motionevent.action_down){
          lastx=x;
          lasty=y;
        }else if (event.getaction()==motionevent.action_move){
          double dx=x-lastx;
          double dy=y-lasty;
          log.d(tag, "ontouch: dx=="+dx+",dy=="+dy);
//      startanimation(dx,dy);

          // movemethod1(dx, dy);
          movemethod2(dx, dy);

          lastx=x;
          lasty=y;
        }
        return true;
      }
    });
  }

//  @override
//  public boolean ontouchevent(motionevent event) {
//    double x=event.getrawx();
//    double y=event.getrawy();
//    log.d(tag, "ontouch: "+event.getaction());
//    if (event.getaction()==motionevent.action_down){
//      lastx=x;
//      lasty=y;
//    }else if (event.getaction()==motionevent.action_move){
//      double dx=x-lastx;
//      double dy=y-lasty;
//      log.d(tag, "ontouch: dx=="+dx+",dy=="+dy);
////      startanimation(dx,dy);
//
//     // movemethod1(dx, dy);
//      movemethod2(dx, dy);
//
//      lastx=x;
//      lasty=y;
//    }
//    return true;
//  }

  //根据属性动画的原理
  private void movemethod2(double dx, double dy) {
    
    mtv1.settranslationx((float) (mtv1.gettranslationx()+dx));
    mtv1.settranslationy((float) (mtv1.gettranslationy()+dy));
  }
  
  //根据margin 原理
  private void movemethod1(double dx, double dy) {
    viewgroup.marginlayoutparams marginlayoutparams= (viewgroup.marginlayoutparams) mtv1.getlayoutparams();
    marginlayoutparams.leftmargin+=dx;
    marginlayoutparams.topmargin+=dy;
    mtv1.setlayoutparams(marginlayoutparams);
  }

  private void startanimation(double dx, double dy) {
    objectanimator objectanimator=objectanimator.offloat(mtv1,"translationx", (float) (mtv1.gettranslationx()+dx)).setduration(3000);
    objectanimator.start();

    objectanimator objectanimator2=objectanimator.offloat(mtv1,"translationy", (float) (mtv1.gettranslationy()+dy)).setduration(3000);
    objectanimator2.start();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网