Android中父View和子view的点击事件处理问题探讨

Android中父View和子view的点击事件处理问题探讨,第1张

概述android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE-& androID中的事件类型分为按键事件和屏幕触摸事件,touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。

一个最简单的屏幕触摸动作触发了一系列touch事件:ACTION_DOWN->ACTION_MOVE->ACTION_MOVE->ACTION_MOVE...->ACTION_MOVE->ACTION_UP

当屏幕中包含一个VIEwGroup,而这个VIEwGroup又包含一个子vIEw,这个时候androID系统如何处理touch事件呢?到底是VIEwGroup来处理touch事件,还是子vIEw来处理touch事件呢?我只能很肯定的对你说不一定。呵呵,为什么呢?看看下面我的调查结果你
就明白了。

androID系统中的每个VIEw的子类都具有下面三个和touchEvent处理密切相关的方法:
1)public boolean dispatchtouchEvent(MotionEvent ev) 这个方法用来分发touchEvent
2)public boolean onIntercepttouchEvent(MotionEvent ev) 这个方法用来拦截touchEvent
3)public boolean ontouchEvent(MotionEvent ev) 这个方法用来处理touchEvent
当touchEvent发生时,首先Activity将touchEvent传递给最顶层的VIEw,
touchEvent最先到达最顶层 vIEw 的 dispatchtouchEvent ,然后由 dispatchtouchEvent 方法进行分发,
如果dispatchtouchEvent返回true ,则交给这个vIEw的ontouchEvent处理,
如果dispatchtouchEvent返回 false ,则交给这个 vIEw 的 intercepttouchEvent 方法来决定是否要拦截这个事件,
如果 intercepttouchEvent 返回 true ,也就是拦截掉了,则交给它的 ontouchEvent 来处理,
如果 intercepttouchEvent 返回 false ,那么就传递给子 vIEw ,由子 vIEw 的 dispatchtouchEvent 再来开始这个事件的分发。
如果事件传递到某一层的子 vIEw 的 ontouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 vIEw 往上传递,都是 ontouchEvent 来接收。
而如果传递到最上面的 ontouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。
复制代码 代码如下:
private LayoutInflater inflater
public VIEw fristVIEw;
public VIEw secondVIEw;
private MyVIEwPager myVIEwPager;
public VIEwPagerAdapter mVIEwPagerAdapter;
private List<VIEw> vIEws;
public gallery mgallery;
@OverrIDe
public voID onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.main);
inflater = getLayoutInflater();
fristVIEw = inflater.inflate(R.layout.main1,null);
secondVIEw = inflater.inflate(R.layout.main2,null);
vIEws = new ArrayList<VIEw>();
vIEws.add(fristVIEw);
vIEws.add(secondVIEw);
mgallery = (gallery) fristVIEw.findVIEwByID(R.ID.gallery);
mgallery.setAdapter(new ImageAdapter(this));
myVIEwPager = (MyVIEwPager) findVIEwByID(R.ID.pager);
mVIEwPagerAdapter = new VIEwPagerAdapter(vIEws);
myVIEwPager.setAdapter(mVIEwPagerAdapter);
}
//界面列表
private List<VIEw> vIEws;
public VIEwPagerAdapter (List<VIEw> vIEws){
this.vIEws = vIEws;
}
//销毁arg1位置的界面
@OverrIDe
public voID destroyItem(VIEw arg0,int arg1,Object arg2) {
((VIEwPager) arg0).removeVIEw(vIEws.get(arg1));
}
@OverrIDe
public voID finishUpdate(VIEw arg0) {
// Todo auto-generated method stub
}
//获得当前界面数
@OverrIDe
public int getCount() {
if (vIEws != null)
{
return vIEws.size();
}
return 0;
}
//初始化arg1位置的界面
@OverrIDe
public Object instantiateItem(VIEw arg0,int arg1) {
((VIEwPager) arg0).addVIEw(vIEws.get(arg1),0);
return vIEws.get(arg1);
}
//判断是否由对象生成界面
@OverrIDe
public boolean isVIEwFromObject(VIEw arg0,Object arg1) {
return (arg0 == arg1);
}
@OverrIDe
public voID restoreState(Parcelable arg0,ClassLoader arg1) {
// Todo auto-generated method stub
}
@OverrIDe
public Parcelable saveState() {
// Todo auto-generated method stub
return null;
}
@OverrIDe
public voID startUpdate(VIEw arg0) {
// Todo auto-generated method stub
}
您可能感兴趣的文章:Android 自定义view模板并实现点击事件的回调Android如何基于坐标对View进行模拟点击事件详解 总结

以上是内存溢出为你收集整理的Android中父View和子view的点击事件处理问题探讨全部内容,希望文章能够帮你解决Android中父View和子view的点击事件处理问题探讨所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142948.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存