Gallery中的子视图处理Click事件
来源:互联网 发布:linux vi文件编辑命令 编辑:程序博客网 时间:2024/06/01 20:20
Gallery中如果是要响应某一视图的点击事件只要设置setOnItemClickListener即可。通常的照片浏览不会有复杂的交互处理逻辑。但是如果gallery的视图不是简单的一张照片而是复杂的视图(Gallery的灵活应用将会为您带来很多的便利)。如需要模仿多屏切换的桌面效果(如android桌面的workspace效果),除了使用ViewFlipper或从android源码中提取workspace,gallery也是个相当好的替代方法。gallery原有的切换动画效果和其成熟稳定性,总比自己造轮子的风险小。
同理,当ScrollView遇到ListView时只要用这种方法即可!
当Gallery内的视图是一个复杂的布局时,总避免不了屏幕内的子视图需要去接管touch、click等事件。遗憾的是如果Gallery的视图自己处理了OnClickListener则会导致gallery不能拨动。就如ScrollView遇到ListView不能滚动一样的问题,应该是这2个控件在设计上的一个缺陷。本文探讨类似冲突的一种解决方案。
之所以会出现 Gallery内的视图处理了OnClickListener事件后不能拨动,是因为子视图接管了touch事件后而未返回给gallery处理。所以解决的办法很简单:在子视图处理完touch事件后再让gallery处理即可。
下面借上一篇<<whatsnew界面>>的实例来讲解,核心的代码如下:
- gallery.setAdapter(new ArrayAdapter<Integer>(ctx,0, WHATSNEW) {
- public View getView(int position, View convertView,final ViewGroup parent) {
- ImageView image = null;
- if (convertView == null) {
- image = new ImageView(getContext()){
- public boolean onTouchEvent(MotionEvent event) {
- boolean b=super.onTouchEvent(event);
- //提交给gallery处理
- gallery.onTouchEvent(event);
- return b;
- }
- };
- image.setScaleType(ScaleType.FIT_XY);
- image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
- } else {
- image = (ImageView) convertView;
- }
- //处理自己的事件
- image.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View arg0) {
- Toast.makeText(ctx, "you click me!", Toast.LENGTH_LONG).show();
- }
- });
- image.setBackgroundColor(Color.BLACK);
- image.setImageResource(WHATSNEW[position]);
- return image;
- }
- });
gallery.setAdapter(new ArrayAdapter<Integer>(ctx, 0, WHATSNEW) { public View getView(int position, View convertView, final ViewGroup parent) {ImageView image = null;if (convertView == null) { image = new ImageView(getContext()){public boolean onTouchEvent(MotionEvent event) { boolean b=super.onTouchEvent(event); //提交给gallery处理 gallery.onTouchEvent(event); return b;} }; image.setScaleType(ScaleType.FIT_XY); image.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));} else { image = (ImageView) convertView;}//处理自己的事件image.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) {Toast.makeText(ctx, "you click me!", Toast.LENGTH_LONG).show(); }});image.setBackgroundColor(Color.BLACK);image.setImageResource(WHATSNEW[position]);return image; }});
同理,当ScrollView遇到ListView时只要用这种方法即可!
- Gallery中的子视图处理Click事件
- Gallery中的子视图处理Click事件
- ListView嵌套Gallery时click事件被Gallery捕获
- ios子视图和父视图同时处理输入事件
- 关于子视图超出父视图后无法响应点击事件的处理办法
- 子视图超出父视图部分仍然响应点击事件的处理
- android click 和onTouch 事件处理机制
- android click 和onTouch 事件处理机制
- JSP处理BUTTON的CLICK事件
- android click 和onTouch 事件处理机制
- Canvas 入门3 Click事件处理
- Gallery 中放置button 点击事件处理
- js中的click和onclick事件区别
- 为iframe中的body添加click事件
- 超出父视图的子视图事件
- iOS父视图拦截子视图事件
- Android应用程序Click事件与Touch事件处理
- click事件
- VC+ADO 连接ACCESS和SQL SERVER的方法
- 网格计算、集群计算、云计算、分布式计算(一)
- WPF App下无法多个窗口按序ShowDialog
- ScrollView里面放入多个子控件
- SSI指令
- Gallery中的子视图处理Click事件
- [总结]关于去除字符串中重复出现长度变化的注释文字的方法
- C函数的可变参数
- 对于汉诺塔问题的递归解决
- 苏宁新战略部署今天宣布,这里有几点对它的建议
- WUA API学习笔记
- opencv2.3图像基本操作
- mfc vc vs 一个控件贴到另一个控件的位置上,GetWindowRect,GetClientRect
- 共性action