欢迎来到代码驿站!

Android代码

当前位置:首页 > 移动开发 > Android代码

android控件实现单击拖动效果

时间:2021-06-29 08:28:29|栏目:Android代码|点击:

本文实例为大家分享了android控件实现单击拖动效果的具体代码,供大家参考,具体内容如下

分析

setOnClickListener

setOnClickListener 可以接收控件的单击动作,无返回值

要想拖动控件,就要利用 setOnTouchListener 自己定义了

setOnTouchListener

通过按下时的坐标和移动时的坐标之间的差值,来计算移动的距离,然后更改控件的位置以达到拖动的目的
因 Touch 事件执行完成后如果返回false则会继续执行单击事件,不是我们想要的。如果直接返回true代表处理完了事件,不再执行单击事件,也不是我们想要的。
这时候就要判断什么时候返回true,什么时候返回false,以达到同时实现单击 + 拖动的目的

实例代码

绑定事件

//绑定拖动事件
floatView.floatMenuIcon.setOnTouchListener(touchListener);
//绑定单击事件,此处为lambda表达式
floatView.floatMenuIcon.setOnClickListener(view -> {
 EventBus.getDefault().post(AccessibilityService.GLOBAL_ACTION_BACK);
});

重写onTouchListener

注意事项

ACTION_UP为手指抬起时执行的事件,单击事件的判断放在此处,如果按下时的坐标和抬起时的坐标相差不大,我们视作单击动作,后期如果需要处理长按动作或双击动作,道理差不多。

完整代码

private final View.OnTouchListener touchListener = new View.OnTouchListener() {
 //记录初使按下时的坐标,会因为拖动而改变
 private float dX;
 private float dY;
 //记录初使按下时的坐标,不因拖动而改变
 private float sX;
 private float sY;

 @SuppressLint("ClickableViewAccessibility")
 @Override
 public boolean onTouch(View view, MotionEvent motionEvent) {
  switch (motionEvent.getAction()) {
   case MotionEvent.ACTION_DOWN:
    dX = motionEvent.getRawX();
    dY = motionEvent.getRawY();
    sX = motionEvent.getRawX();
    sY = motionEvent.getRawY();
    break;
   case MotionEvent.ACTION_MOVE:
    //拖动事件,为了能够实时拖动,而非抬起后再移动,所以处理代码放到ACTION_MOVE中
    float nX = (int) motionEvent.getRawX();
    float nY = (int) motionEvent.getRawY();
    float cW = nX - dX;
    float cH = nY - dY;
    dX = nX;
    dY = nY;
    layoutParams.x = (int) (layoutParams.x + cW);
    layoutParams.y = (int) (layoutParams.y + cH);
    windowManager.updateViewLayout(mView, layoutParams);
    break;
   case MotionEvent.ACTION_UP:
    //如果抬起时的位置和按下时的位置大致相同视作单击事件
    //间隔值可能为负值,所以要取绝对值进行比较
    if (Math.abs(motionEvent.getRawX() - sX) > 6 && Math.abs(motionEvent.getRawY() - sY) > 6) {
     return true;
    }
    break;
  }
  return false;
 }
};

上一篇:Android实现微信支付功能

栏    目:Android代码

下一篇:解决Android调用系统分享给微信,出现分享失败,分享多文件必须为图片格式的问题

本文标题:android控件实现单击拖动效果

本文地址:http://www.codeinn.net/misctech/149983.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有