Android事件机制——-MotionEvent
来源:互联网 发布:js实现日期三级联动 编辑:程序博客网 时间:2024/06/05 06:13
Android事件机制——-MotionEvent
1、提出问题?
1)Android是如何响应对其中的某个视图的操控操作呢? ------>MotionEvent2)Android是如何响应手机的按键操作呢? ------->KeyEvent(对KeyEvent一点都不清楚就点我哦)
2、屏幕控制(MotionEvent)机制
1)事件类型:
down move up
2)事件发生的顺序:
down --> move --> move -->...-->up
3)API:
a、MotionEvent: 触屏事件
int ACTION_DOWN = 0 :代表down int ACTION_MOVE = 1 :代表move int ACTION_MOVE =2: 代表up getAction :得到事件类型值 getX():得到事件发生的x轴坐标(相对于当前视图) getRawX():得到事件发生的x轴坐标(相对于屏幕左顶点 getY():得到事件发生的y轴坐标(相对于当前视图) getRawY():得到事件发生的y轴坐标(相对于屏幕左顶点
b、Activity
boolean dispatch TouchEvent(MotionEvent event) :分发事件 boolean on TouchEvent(MotionEvent event) 处理事件的回调
c、View
boolean dispatchTouchEvent(MotionEvent event) :分发事件 boolean on TouchEvent(MotionEvent event) 处理事件的回调 void setOnTouchListener(OnTouchListener i) : 设置事件监听器 void setOnClickListener(OnClickListener i) :设置点击监听 void setOnLongClickListener(OnLongclickListener i) :设置长按监听 void setOnCreateContextMenuListener(OnCreateContextMenuListener i ) : 用于创建菜单
d、ViewGroup
boolean dispatchTouchEvent(MotionEvent event) :分发事件 boolean onInterceptTouchEvent(MotionEvent ev):black_large_square :拦截事件的回调方法
事件:
分发 --->dispatchTouchEvent();处理--->onTouchEvent(), onTouch()消费--->处理时间的方法返回 true, 当前事件对象就结束了
4)事件分发和处理流程
3、基础案例应用
拖动图片(MotionEvent)
a、事件处理 b、动态给视图进行重新布局定位(左下角、右下角) c、动态给视图进行重新布局定位(view.layout(l,t,r,b))
1、首先创建一个MotionEventActivity(可以视为MainActivity)
2、在MotionEventActivity的布局文件中,改为RelativeLayout布局,然后创建一个ImageView
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/parentView" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zxb.apptest_motionevent.MainActivity" tools:layout_editor_absoluteY="81dp" tools:layout_editor_absoluteX="0dp"> <ImageView android:id="@+id/iv_main" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/xz" /></RelativeLayout>
3、在MotionEventActivity中对布局进行初始化
public class MotionEventActivity extends Activity implements View.OnTouchListener { private ImageView iv_main; private RelativeLayout parentView; private int pright, pbottom; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_motion_event); //初始化imageview iv_main = (ImageView) findViewById(R.id.iv_main); //获取imageview的父容器 parentView = (RelativeLayout) iv_main.getParent(); //对imageview设置监听事件 iv_main.setOnTouchListener(this); } private int lastX; private int lastY; @Override public boolean onTouch(View v, MotionEvent event) { // 得到事件的坐标 int eventX = (int) event.getRawX(); int eventY = (int) event.getRawY(); switch (event.getAction()){ case MotionEvent.ACTION_DOWN: if(pright ==0){ //得到父视图的right 和 bottom pright = parentView.getRight(); pbottom = parentView.getBottom(); } //第一次记录lastX,lastY lastX = eventX; lastY = eventY; break; case MotionEvent.ACTION_MOVE: //计算事件的偏移 int dx = eventX - lastX; int dy = eventY - lastY; //根据事件的偏移来移动imageView int left = iv_main.getLeft()+dx; int top = iv_main.getTop()+dy; int right = iv_main.getRight()+dx; int bottom = iv_main.getBottom()+dy; if (left<0){ right+=-left; left =0; } if(top<0){ bottom+=-top; top = 0; } if(right>pright){ left-=right-pright; right =pright; } if(bottom>pbottom){ top-=bottom-pbottom; bottom =pbottom; } iv_main.layout(left,top,right,bottom); //在次记录lastX,lastY lastX = eventX; lastY = eventY; break; default: break; } return true;//所有MotionEvent都交给imageView处理 }}
@Android_noob小白一枚,希望各路大神前来指教
阅读全文
0 0
- Android事件机制——-MotionEvent
- Android MotionEvent事件响应机制
- Android MotionEvent事件分发机制源码剖析
- Android学习记录:MotionEvent,onTouch,OnTouchListener 事件机制等学习
- 详细剖析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制
- 详细剖析 android onInterceptTouchEvent(MotionEvent event) 和 onTouchEvent(MotionEvent event) 的事件传递机制
- Android模拟MotionEvent事件
- Android MotionEvent分发机制
- android事件分析(二)——MOTIONEVENT事件在ONINTERCEPTTOUCHEVENT()、ONTOUCHEVENT()中的传递顺序
- android源码分析——事件输入流程MotionEvent事件处理流程
- Android 手势&触摸事件 MotionEvent
- android MotionEvent.ACTION_DOWN 事件丢失
- Android事件处理之MotionEvent
- Android 手势&触摸事件 MotionEvent
- Android 手势&触摸事件 MotionEvent
- Android 手势&触摸事件 MotionEvent
- Android多点触控之——MotionEvent(触控事件)
- Android——MotionEvent对象分析
- 如何控制html中字符字体的宽度?
- Java中字符串与数组,数组与list之间的转化,及字符串处理
- eclipse导入工程步骤
- php操作redis全家桶
- 反射与内省(一)Java
- Android事件机制——-MotionEvent
- 关于jquery中html()、text()、val()的区别
- 学校CRM管理系统遇到的问题
- 职场血教训
- JVM内存模型整理
- 在QTP的脚本中建立Action模板(转载未实践)
- 初学6N±1判定素数
- 支付宝支付记录
- 自定义dialog