写android也有一段时间了,自定义控件也写了无数个了。但是对于里面的很多迷惑的知识,老是记不住,每次写的时候都要重新在网上查。总感觉这样也不是一回事,因此在这里做笔记,以后方便查询吧。
1. onTouch(View v, MotionEvent event)
event.getX()手指点击相对于点击控件的x;
event.getRawx();手机点击的位置相对于屏幕左上方的位置;
v.getx()是相对于父控件的位置;
模型讲解看链接: 点击打开链接
2.view.layout(int l, int t, int r, int b).
四个参数为左上角的(x1,y1),右下角的(x2,y2);其中的位置为相对父控件的位置。
3. LayoutParams
x:与Gravtiy的相对位置。如果忽略gravity则表示距离屏幕左上角的绝对位置。
4.
1.当ACTION_DOWN返回false时,此时标记为点下,表现为按钮深色。为ture时,没有点击动作产生
2.当ACTION_UP返回false是,此时标记为释放点击,表现为按钮由深色释放。为true时,若前面有点下的动作,此时不会释放。
3.只有外完成了上面两个点击、释放动作以后,才会产生onclick的操作。因此ontouch多返回为false时,比较全面。
4.点击打开链接
5.ontouch返回为true则表明此次动作消费。(?)
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN://ACTION_DOWN返回为false时,标记为点击事件。由此才可能触发onclick。
return true;
case MotionEvent.ACTION_MOVE:
Log.e("move", "s");
return false;
case MotionEvent.ACTION_UP:
Log.e("up", "s");
///.ACTION_UP:为false时,也标记为点击事件,此时才能触发onclick
return false;
}
6.当子层捕获了点击事件,返回为true时,则父层不会继续捕获点击事件。若返回为false,则父层会继续捕获点击事件。当子层没有对点击事件写监听器时,则不会捕获点 击事件。如果没有重载ontouch函数,并设置其返回值,只要子层写了监听事件,则默认子层应该返回true。
本文详细解析了Android自定义控件中onTouch方法的工作原理,包括不同触摸事件的动作及如何处理这些动作,同时介绍了view.layout方法的使用,LayoutParams属性的作用,以及触摸事件传递机制。

1554

被折叠的 条评论
为什么被折叠?



