Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置

 更新时间:2017年02月21日 16:37:42   作者:觅食的松鼠  
这篇文章主要介绍了Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置的实现代码,非常不错,具有参考借鉴价值,需要的朋友可以参考下

以自定义ImageView为例:

/**
 * 可拖拽ImageView
 * Created by admin on 2017/2/21.
 */
public class FloatingImageView extends ImageView{
  public FloatingImageView(Context context) {
    super(context);
  }
  public FloatingImageView(Context context, AttributeSet attrs) {
    super(context, attrs);
  }
  public FloatingImageView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }
  @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  public FloatingImageView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
    super(context, attrs, defStyleAttr, defStyleRes);
  }
  int startX;
  int startY;
  int left;
  int top;
  int[] temp = new int[]{ 0, 0 };
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    boolean isMove = false;
    int x = (int) event.getRawX();
    int y = (int) event.getRawY();
    switch (event.getAction()){
      case MotionEvent.ACTION_DOWN: // touch down so check if the
        startX = x;
        startY = y;
        temp[0] = (int) event.getX();
        temp[1] = y - getTop();
        break;
      case MotionEvent.ACTION_MOVE: // touch drag with the ball
        left = x - temp[0];
        top = y - temp[1];
        if(left < 0){//控制左边界不超出
          left = 0;
        }
        layout(left, top, left + getWidth(),top + getHeight());//自由拖拽
        break;
      case MotionEvent.ACTION_UP:
        if (Math.abs(x - startX) > 2 || Math.abs(y - startY) > 2){//判断是否移动,再一定范围内不算是移动,解决触发事件冲突
          //将最后拖拽的位置定下来,否则页面刷新渲染后按钮会自动回到初始位置
          //注意父容器
          RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams();
          lp.setMargins(left, top,0,0);
          setLayoutParams(lp);
          //确定是拖拽
          isMove = true;
         }
        break;
    }
    return isMove ? true : super.onTouchEvent(event);
   }
}

以上所述是小编给大家介绍的Android 自定义可拖拽View界面渲染刷新后不会自动回到起始位置,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android中常用的三个Dialog弹窗总结解析

    Android中常用的三个Dialog弹窗总结解析

    自己虽然一直使用过dialog,但是一直都是复制、粘贴;不清楚dialog的具体用途,这次趁着有时间,总结一下具体用法,感兴趣的朋友跟着小编来看看吧
    2021-10-10
  • 利用Kotlin的方式如何处理网络异常详解

    利用Kotlin的方式如何处理网络异常详解

    这篇文章主要 给大家介绍了关于利用Kotlin的方式如何处理网络异常的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android自定义textview实现竖直滚动跑马灯效果

    Android自定义textview实现竖直滚动跑马灯效果

    这篇文章主要为大家详细介绍了Android自定义textview实现竖直滚动跑马灯效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Android  Handler 机制实现原理分析

    Android Handler 机制实现原理分析

    本文主要介绍 Android Handle机制实现的原理,这里整理了详细的关于Handler的资料以及工作流程和实际应用,有兴趣的小伙伴可以参考下
    2016-08-08
  • Android mvvm之LiveData原理案例详解

    Android mvvm之LiveData原理案例详解

    这篇文章主要介绍了Android mvvm之LiveData原理案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • Android基础之Fragment与Activity交互详解

    Android基础之Fragment与Activity交互详解

    以下小编就为大家介绍一下Fragment跟Activity之间的关系。需要的朋友可以过来参考下
    2013-07-07
  • Android编程开发之多点触摸(Multitouch)实现方法

    Android编程开发之多点触摸(Multitouch)实现方法

    这篇文章主要介绍了Android编程开发之多点触摸(Multitouch)实现方法,结合实例形式详细分析了Android多点触摸的相关实现步骤与操作技巧,需要的朋友可以参考下
    2016-08-08
  • Android自定义View实现字母导航栏

    Android自定义View实现字母导航栏

    通常手机通讯录都会有索引栏,这篇文章主要介绍了Android自定义View实现字母导航栏,现在分享给大家。
    2016-10-10
  • Android测试中Appium的一些错误解决技巧

    Android测试中Appium的一些错误解决技巧

    今天小编就为大家分享一篇关于Android测试中Appium的一些错误解决技巧的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Android 中使用 dlib+opencv 实现动态人脸检测功能

    Android 中使用 dlib+opencv 实现动态人脸检测功能

    完成 Android 相机预览功能以后,在此基础上我使用 dlib 与 opencv 库做了一个关于人脸检测的 demo。接下来通过本文给大家介绍Android 中使用 dlib+opencv 实现动态人脸检测功能 ,需要的朋友可以参考下
    2018-11-11

最新评论