实现可自由拖动的view
来源:互联网 发布:学拼音软件 一年级 编辑:程序博客网 时间:2024/05/29 03:16
查了网上的资料,大部分实都是给view 设置一个ontouch listener,在ontouch中获取当前的坐标,然后调用layout()方法,实现view 的重新定位。
后来发现这个方法有问题,当整个界面需要刷新的时候,页面重新绘制以下,这个被移动的view又回到了初始位置!令人头疼,大家都说是因为没有将layoutparams保存下来,找了半天也没找到保存的办法!
终于在无意中看到了一个极简的方法,Thank goodness !终于得到了解救。
就是这个简单的方法,本来是设置动画的,当duration设置为0 的时候,便很顺畅地用到了view的自由移动
v.animate() .y(rawY + offsetY) .setDuration(0) .start();
以下 是全部,完成的是一个view实现边缘拖动的效果,此外,还要响应onclick 事件,因为touch事件会跟click事件冲突,因此,用touch事件自定义了click事件,当时间和移动的距离都小于click的阈值时,就认为click事件发生了
mNineBoxContainer.setOnTouchListener(new OnTouchListener() { int lastY; long startTouchTime, endTouchTime; long clickDuration = 200; float startTouchX, startTouchY, endTouchX, endTouchY; @Override public boolean onTouch(View v, MotionEvent event) { int rawX = (int) event.getRawX(); int rawY = (int) event.getRawY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: startTouchX = event.getRawX(); startTouchY = event.getRawY(); startTouchTime = System.currentTimeMillis(); lastY = rawY; break; case MotionEvent.ACTION_MOVE: if(rawY < 0) { rawY = 0; } if(rawY > screenWidth - v.getMeasuredHeight()) { rawY = screenWidth - v.getMeasuredHeight(); } int offsetY = rawY - lastY; v.animate() .y(rawY + offsetY) .setDuration(0) .start(); lastY = rawY; break; case MotionEvent.ACTION_UP: endTouchTime = System.currentTimeMillis(); endTouchX = rawX; endTouchY = rawY; if (endTouchTime - startTouchTime <= clickDuration) { double distance = Math.sqrt(Math.abs(endTouchX - startTouchX) * Math.abs(endTouchX - startTouchX) + Math.abs(endTouchY - startTouchY) * Math.abs(endTouchY - startTouchY));//两点之间的距离 if (distance < 15) { // 距离较小,当作click事件来处理 if (mNineBoxFloatManager != null) { mNineBoxFloatManager.showNineBoxLayer(true); } } } lastY = rawY; break; } return true; } });
0 0
- 实现可自由拖动的view
- 可在全屏幕自由拖动的view
- 可在全屏幕自由拖动的view
- 实现自定义view(1):可在全屏幕自由拖动的view
- Android 可在全屏幕自由拖动的view
- Android可在全屏幕自由拖动的view
- Android 简单实现可全屏拖动,可点击的View
- 一直在寻找的,可在全屏幕自由拖动的view,很炫!
- 可自由拖动的DIV层方块
- 一个可拖动的View
- View的自由拖动(属性动画的实践之一)
- Android-可随意拖动的View
- ViewDragHelper详解- 可拖动的view
- ViewDragHelper详解- 可拖动的view
- 自定义VIEW,可拖动的控件
- android开发自定义View,可以自由拖动的控件
- android自定义view实现可自由放大缩小和移动的imageView
- 自定义view,可拖动
- HTML/CSS: 用CSS与HTML实现表格的显示
- FPGA魔法(1)
- Vector与 ArrayList、Hashtable 与 HashMap、ArrayList 与 LinkedList的区别
- 线程
- jQuery append() 方法与 after() 方法
- 实现可自由拖动的view
- js和jquery如何获取(图片)真实的宽度和高度
- SSO单点登录使用token机制来验证用户的安全性
- 关于Java的值传递和引用传递
- PHP——冒泡排序算法
- OLE-LABEL
- 第三周项目4-顺序表应用2
- 正则表达式分组算法:Yu算法
- Android N混合编译与对热补丁影响解析