控件的移动事件和双击事件
- 拖动控件事件 和 双击事件
public class MoveActivity extends Activity {private LinearLayout mLl_move;private int mWidth;private int mHeight;private long[] mNum = new long[2];private int mStartY;private int mStartX;private SharedPreferences sp ;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_move);mLl_move = (LinearLayout) findViewById(R.id.ll_move);sp = getSharedPreferences("config", MODE_PRIVATE);WindowManager manager = (WindowManager) getSystemService(WINDOW_SERVICE);//得到一张白纸DisplayMetrics metrics = new DisplayMetrics();//给白纸设置整个屏幕manager.getDefaultDisplay().getMetrics(metrics);//得到屏幕的宽高mWidth = metrics.widthPixels;mHeight = metrics.heightPixels;//回显操作int x = sp.getInt("x", 100);int y = sp.getInt("y", 100);/* //这个方法不能在onCreate方法中使用,因为onCreate方法中是初始化控件的,所以控件的宽高得不到的mLl_move.layout(x , y ,x + mLl_move.getWidth() , y + mLl_move.getHeight());*///这个方法是初始化控件前,重新设置控件的属性-LayoutParams- , 就是在加载控件前先给它一个位置//得到控件的父布局RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) mLl_move.getLayoutParams();//通过父布局的属性来设置控件的位置,设置控件左上角的坐标params.leftMargin = x;params.topMargin = y ;mLl_move.setLayoutParams(params);showMove();doubleEvent();}
- 双击事件的简单解释图
/*** 双击事件* */private void doubleEvent() {mLl_move.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//参数1. 拷贝的原数组//2.从原数组那个位置开始拷贝//3.拷贝到目标数组//4.从目标数组那个位置开始去拷贝//5.拷贝的长度System.arraycopy(mNum , 1 , mNum , 0 ,mNum.length-1 );//得到开机的时间mNum[1] = SystemClock.uptimeMillis();if (mNum[0] >= (SystemClock.uptimeMillis() - 500)){int l = (mWidth - mLl_move.getWidth()) / 2;int t = (mHeight - mLl_move.getHeight()-25) / 2;mLl_move.layout(l , t , l+mLl_move.getWidth() , t+mLl_move.getHeight());}}});}/*** 拖动事件* */private void showMove() {mLl_move.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN://按下的事件,得到XY的坐标LogUtil.d("按下的事件","sssss");mStartX = (int) event.getRawX();mStartY = (int) event.getRawY();break;case MotionEvent.ACTION_MOVE://移动的事件,移动后的XY的坐标LogUtil.d("移动的事件","sssss");int newX = (int) event.getRawX();int newY = (int) event.getRawY();//计算偏移量int dX = newX - mStartX ;int dY = newY - mStartY ;//移动相应的偏移量,重新绘制//这是原来控件的位置int left = mLl_move.getLeft();int top = mLl_move.getTop();//移动后的位置,就是原来的坐标+偏移量left += dX;top += dY;//宽度和高度,就是最新的XY周坐标加上控件的宽高度int right = left + mLl_move.getWidth();int bottom = top + mLl_move.getHeight();//开始绘制之前先判断位置是否超出了屏幕if (left < 0 || top < 0 || right > mWidth || bottom > mHeight-25 ){break;}mLl_move.layout(left, top ,right ,bottom);//更新坐标mStartX = newX;mStartY = newY;break;case MotionEvent.ACTION_UP://抬起的事件LogUtil.d("抬起的事件","sssss");//保存位置数据,为了回显操作int x = mLl_move.getLeft();int y = mLl_move.getTop();SharedPreferences.Editor edit = sp.edit();edit.putInt("x" , x);edit.putInt("y" , y);edit.apply();break;}return false;//这里要返回true //如果还有点击事件就返回false}});}
}
- 触摸事件和点击事件的冲突
- 点击事件 : 一组事件的集合,按下+抬起
- 触摸事件 : 每个事件都是一个单独的事件,按下,移动,抬起
如果只有触摸事件:return true表示事件执行如果点击事件和触摸事件共同存在,触摸事件的事件是会点击事件消费掉先执行触摸 : 然后执行其他事件点击 : 按下+抬起1.return false触摸 : 按下 执行完 -> 移动 执行完 -> 抬起 触摸+点击 : 按下(触摸) 拦截 - > 按下(点击) 执行 - > 抬起(触摸) 拦截 - > 抬起(点击) 执行 - > 输出(触摸) - > 输出(点击)2.return true触摸 : 按下 -> 移动 -> 抬起触摸+点击 按下(触摸) 执行 -> 移动(触摸) -> 抬起(触摸)*****如果只有触摸事件:return true;如果触摸+点击事件:触摸事件return false
控件的移动事件和双击事件相关推荐
- UI控件无法响应点击等事件的探索
2019独角兽企业重金招聘Python工程师标准>>> UI控件无法响应点击等事件的探索 一.响应者链 关于响应者链,有如下一段介绍:每一个应用有一个响应者链,我们的视图结构是一个N ...
- Element Tree 树形控件自定义显示样式与hover事件绑定实现添加、删除和修改
Element Tree 树形控件自定义显示样式与hover事件绑定实现添加.删除和修改 最近在搞erp项目对应后台的管理功能,为了加速开发使用了 vue-element-admin 开发,使用的是e ...
- QT实现控件不响应鼠标点击事件
QT中很多控件都有鼠标点击的事件响应,比如QPushButton,QRadioButton.有时候我们想要实现的是:当鼠标点击控件时,不会产生响应事件.其中的一种方法是使用Qt::WA_Transpa ...
- Glade CheckButton(CheckBox)控件的使用与Python的事件绑定
附件文件 gtkCheckBox.glade gtkCheckBox.py 试验目的 Glade CheckButton(CheckBox)控件的使用与Python的事件绑定 试验过程 打开 Glad ...
- input绑定的jedate日期控件的值改变时触发事件问题
一.input绑定的jedate日期控件的值改变时触发事件问题 一般input中值发生改变,用onchange 就可以触发事件,但我现用jedate日期控,选中日期后,发现onchange无效. 后经 ...
- java单机按键事件_JavaFX 事件总结(单机事件和双击事件)
学JavaFX的肯定都是有java基础的 所以都是想单纯的把像javaweb那样 什么单机事件啊 双击事件啊 键盘按下事件啊 表单验证什么的 自己找了一圈总结一下 1.单机事件 首先在MyContro ...
- js实现单击事件和双击事件
js实现单击事件和双击事件 目的 1.希望通过单击事件调用ajax方法 2.希望通过双击事件修改选中的对象的背景色,从而获取选中的对象 思想 1.首先设置一个状态值为false 2.点击的时候,判断状 ...
- Bootstrap点击事件(单击事件及双击事件)
Bootstrap点击事件 以上两种事件均可达到单击事件及双击事件的效果.下面我们分别举例说明: jQuery事件 //表格点击事件 $('#getCqltj').on('dbl-click- ...
- vue.js绑定单击事件和双击事件(共用同一个方法代码示例)
首先,先来学习一下绑定单击事件和双击事件的2个常用标签: v-on:click 表示单击 v-on:dblclick 表示双击 示例代码如下: <!DOCTYPE html> < ...
最新文章
- C语言extern关键字定义外部变量--Redis源码extern使用
- [专题总结]AC自动机
- Go-err is shadowed during return
- 一个Web Project引用多个Java Project在Eclipse下的配置--转载
- Debian 9/10快速开启Google BBR的方法,实现TCP高效单边加速
- Spring(十二)之JDBC框架
- 2.3.2便捷的电子邮件
- php关键词分词搜索 最多匹配的排在最前面_图解 | 通用搜索引擎背后的技术点...
- java 面试题三十三 子类父类方法执行顺序的问题
- My Appointment编辑场景下的roundtrip
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(Anaconda软件使用)
- 页面无法正常显示,淘宝又崩了!周五上班摸鱼被发现...
- 大数据自学1-CentOS 下安装CDH及Cloudera Manager
- 专升本计算机专业是理工类吗,理工类专接本有些专业
- 拼多多sdk php,学习猿地-【扩展分享】拼多多 API SDK【拼多多开放平台】
- jQuery 瀑布流插件
- 流量焦虑意外带来契机,“福禄控股们”赚钱容易做大难?
- 微信摇一摇服务器实现,微信摇一摇事件通知
- 作物产量常用的单位换算公式
- 【Linux】特别篇--sqlite3数据库的使用