控件的移动事件和双击事件
来源:互联网 发布:小草水冷淘宝 编辑:程序博客网 时间:2024/05/21 12:42
- 拖动控件事件 和 双击事件
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 ; @Override protected 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() { @Override public 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() { @Override public 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
0 0
- 控件的移动事件和双击事件
- 控件的单击事件和双击事件
- TreeView控件的双击事件
- 42移动归属地的bug解决和双击事件
- 安卓控件双击和多击事件的实现
- android 监听控件的单机和双击事件
- 4.2 控件双击事件和触摸事件同时响应
- 扩展GridView控件(6) - 响应行的单击事件和双击事件
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- 扩展GridView控件(6) - 响应行的单击事件和双击事件
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
- android studio volley image
- toj 4610 Biggest Number
- javascript_lesson2_基本概念
- 判断网络状况,切换访问主机地址
- POJ 2112 Optimal Milking, 二分, floyd, 二分图
- 控件的移动事件和双击事件
- 错误 Cannot load driver class: com.mysql.jdbc.Driver
- itext7基础知识——第1章
- eclipse ctrl+左键 的快捷键失效的解决方法
- throw抛异常
- 报0xc000007b错误
- 设计模式--Singleton
- Pku oj 1308 Is It A Tree?(并查集)
- 简单的模板