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滑动列表(拖拽,左滑删除,右滑完成)功能实现(1)
场景: 近期做的TODO APP需要在主页添加一个功能,就是可以左滑删除,右滑完成.看了一下当前其他人做的例如仿探探式的效果,核心功能基本一样,但是和我预想的还是有少量区别,于是干脆自己重头学一遍如何 ...
- Android list刷新后仍然定位到原来的位置,解决。
问题: 有一个list,点击item时会做一些事情,然后重新加载数据,此时希望点击重新刷新后item还在原来的位置,而不是跳转到开头. 实现如下: 1.listview添加监听setOnScrollL ...
- QT笔记之自定义窗口拖拽移动
1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...
- Android中GridView拖拽的效果【android进化三十六】
最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的 ...
- Android中GridView拖拽的效果
最 近看到联想,摩托罗拉等,手机launcher中有个效果,进入mainmenu后,里面的应用程序的图标可以拖来拖去,所以我也参照网上给的代码,写了 一个例子.还是很有趣的,实现的流畅度没有人家的那么 ...
- Android开发:拖拽
google官网的training和API两个地方都提到了拖拽的实现,两种方法不太一样. 方法一 training(https://developer.android.com/training/ges ...
- Android滑动列表(拖拽,左滑删除,右滑完成)功能实现(2)
ItemTouchHelper类 之前我们实现了滑动列表的一些基本功能,为了实现更多的效果,我们来仔细看一下ItemTouchHelper中的类: ItemTouchHelper.SimpleCall ...
- vue视频: 自定义指令 && 拖拽 && 自定义键盘信息
v-textv-forv-html 指令: 扩展html语法 自定义指令:1. 自定义属性指令: Vue.directive(指令名称,function(参数){ this.el -> 原生DO ...
- iPhone手机解锁效果&&自定义滚动条&&拖拽--Clone&&窗口拖拽(改变大小/最小化/最大化/还原/关闭)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
随机推荐
- LintCode: Convert Sorted Array to Binary Search Tree With Minimal Height
C++ /** * Definition of TreeNode: * class TreeNode { * public: * int val; * TreeNode *left, *right; ...
- 算法笔记_219:泊松分酒(Java)
目录 1 问题描述 2 解决方案 1 问题描述 泊松是法国数学家.物理学家和力学家.他一生致力科学事业,成果颇多.有许多著名的公式定理以他的名字命名,比如概率论中著名的泊松分布. 有一次闲暇时,他 ...
- python xlwt写excel格式控制 颜色、模式、编码、背景色
关于写excel的格式控制,比如颜色等等 import xlwt from datetime import datetime font0 = xlwt.Font() font0.name = 'Tim ...
- Java多线程之线程阻塞原语LockSupport的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558597.html 看名字就知道了,LockSupport——提供对加锁机制的支持. 它是提供线程阻塞的原 ...
- cocos2d-js 3.0 rc0 编译release报错 value for keystore is not valid. it must resolve to a single path
第一次编译是好好的,需要手工输入keystore文件地址和密码等等.第二次不需要输入,然后就直接出错了. 找了一下,发现第一步之后,cocos会记录ant信息到\frameworks\runtim ...
- ROS知识(15)----Actionlib的使用(一)
Actionlib是ROS非常重要的库,像执行各种运动的动作,例如控制手臂去抓取一个杯子,这个过程可能复杂而漫长,执行过程中还可能强制中断或反馈信息,这时Actionlib就能大展伸手了. 1.原理 ...
- IM系统架构设计之浅见
转自:http://mobile.51cto.com/hot-439693.htm 背景:除去大名鼎鼎的QQ这款即时聊天工具,还有许多细分行业的IM,比如淘宝阿里旺旺.网易泡泡.YY语音....... ...
- 存储过程—导出table数据为inser sqlt语句
Sql Server Management Studio没有将table中数据导出为insert语句的功能. 下面一个很有用的存储过程,可以把某张表的数据导出为insert sql语句.当然Oracl ...
- 【php+uploadify3.2】上传按钮点击一点反应都没有,原因
原因: 代码没有问题,这个原因也困扰我一段时间,是由于浏览器禁用了flash,需要放开,操作方法如下: 在谷歌浏览器输入:chrome://settings/content/flash 然后添加需要该 ...
- Eclipse 语言包下载
1.登陆http://www.eclipse.org/babel/downloads.php 选择你的eclipse版本 2.找到IDE中文补丁包 INDIGO的地址如下:http://downl ...