`
hemowolf
  • 浏览: 154116 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Gallery中的子视图处理Click事件

阅读更多

 

 

Gallery中如果是要响应某一视图的点击事件只要设置setOnItemClickListener即可。通常的照片浏览不会有复杂的交互处理逻辑。但是如果gallery的视图不是简单的一张照片而是复杂的视图(Gallery的灵活应用将会为您带来很多的便利)。如需要模仿多屏切换的桌面效果(如android桌面的workspace效果),除了使用ViewFlipper或从android源码中提取workspace,gallery也是个相当好的替代方法。gallery原有的切换动画效果和其成熟稳定性,总比自己造轮子的风险小。

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;
	    }
	});
 
同理,当ScrollView遇到ListView时只要用这种方法即可!

 

 

分享到:
评论

相关推荐

    Gallery与其Item的Click事件冲突的解决办法

    `Gallery`作为一个经典的水平滚动视图容器,在Android早期版本中非常受欢迎,它允许用户通过简单的左右滑动来浏览一系列的项目。然而,在实际应用中可能会遇到一个问题:当我们为`Gallery`中的每一个`Item`添加点击...

    HorizontalScrollView实现Gallery

    在"HorizontalScrollView实现Gallery"这个项目中,开发者通过继承LinearLayout来构建一个自定义的视图容器,这是因为LinearLayout可以方便地管理子视图的排列方式,支持垂直和水平方向的布局。通过继承LinearLayout...

    Gallery android2.3源码

    在`onMeasure`和`onLayout`方法中,Gallery会计算并布局子视图的位置,确保它们能在水平方向上正确显示。 二、触摸事件处理 在`onTouchEvent`方法中,Gallery通过检测MotionEvent的ACTION_DOWN、ACTION_MOVE和...

    Android应用源码之Gallery1_Gallery.zip

    例如,`android:gravity`用于设置子视图在Gallery中的对齐方式。 5. **自定义滚动行为**:Gallery控件的滚动速度和动画效果可以通过覆写`onFling()`和`onScroll()`方法来自定义。 6. **图片加载库**:由于Gallery...

    Gallery视图

    利用Gallery所写的视图,可以左右滑动选取图片,采用UTF—8的格式

    Gallery源码

    1. **测量与布局**:在`onMeasure()`方法中,Gallery会计算其所有子视图的大小,并确保它们能在屏幕上正确显示。这个过程涉及到对MeasureSpec的理解,以及如何根据屏幕尺寸调整子视图的大小。 2. **滚动处理**:...

    Android应用源码之Gallery2.zip

    - `LayoutParams.java`: 子视图的布局参数类,定义了子视图在Gallery中的位置和大小。 - `GestureDetector.java`: 处理用户的触摸事件,如滑动、点击等。 - `OnItemSelectedListener.java`: 监听用户选择项改变的...

    Gallery循环删除图片

    在Android开发中,"Gallery循环删除图片"是一个常见的需求,主要涉及到 Gallery 组件的使用、Java反射机制的应用以及图片管理。下面将详细讲解这些知识点。 首先,Gallery 是 Android 提供的一种特殊的视图组件,...

    Android HorizontalScrollView实现横向Gallery

    为了模拟Gallery的焦点和选中效果,我们可以监听HorizontalScrollView的滚动事件,当用户滚动到某个子视图时,更新其他子视图的状态,如改变背景色或添加边框,以突出当前选中项。 5. **优化性能**: 当...

    Fragment+ViewPager解决viewPager与Gallery的事件冲突

    你可以创建一个`GestureDetector`实例,然后在`ViewPager`和`Gallery`的触摸事件处理中使用它。根据`GestureDetector`的回调方法,决定事件应该被哪个组件消费。 3. **设置OnTouchListener**: 为`ViewPager`和`...

    android--Gallery 的基本使用

    使用`addView()`方法向`Gallery`中添加子视图,每个子视图可以是任何可绘制的对象,如`ImageView`。 接下来,我们讨论`ImageSwitcher`组件。`ImageSwitcher`是`ViewSwitcher`的子类,专为展示图片切换设计,常与`...

    Android Gallery

    在onMeasure()中,Gallery会测量每个子视图的大小,并根据屏幕尺寸来确定显示的子视图数量。在onLayout()中,子视图会被按照一定的顺序布局,形成一个可滚动的横轴列表。 Gallery的关键特性是它可以水平滚动,用户...

    Gallery中可拖动itemView例子

    在Android开发中,`Gallery`组件是早期用于展示一系列横向滑动的图片或视图的控件,类似于轮播图。然而,`Gallery`在Android API Level 16(Jelly Bean)之后已经被弃用,取而代之的是更强大且易用的`RecyclerView`...

    Gallery可拖动和放大图片

    这通常通过在`Gallery`的`onInterceptTouchEvent()`方法中返回`false`来实现,这样所有的触摸事件都会直接传递给子视图处理。 此外,为了优化性能和用户体验,开发者可能还考虑了图片的内存管理和加载策略,如使用`...

    Android Gallery 特效

    1. **自定义ViewGroup**:你需要继承自`ViewGroup`,并重写`onLayout()`方法来确定子视图的位置,以及`onTouchEvent()`来处理触摸事件。 2. **计算滚动位置**:在处理触摸事件时,需要计算出用户的滑动距离,然后...

    Android4.0的Gallery源码

    Gallery通过重写onMeasure()和onLayout()方法来实现自定义布局,确保每个子视图(通常是ImageView)能够在水平轴上正确地排列和显示。 2. **适配器**:Gallery使用Adapter来填充数据。Adapter是Android中用于连接...

    Android应用源码之Gallery_Gallery.zip

    1. **Gallery.java** - 这是Gallery组件的主要实现类,包含了触摸事件处理、滚动逻辑和布局管理。其中,`onTouchEvent()`方法是处理用户触摸事件的地方,通过计算滑动距离来决定滚动的位移。`onMeasure()`和`...

    Android-这是一个简单的Gallery视图演示项目

    在Android开发中,Gallery视图是一种非常有用的控件,它允许用户通过左右滑动来浏览一系列的图片或项目。这个项目“Android-这是一个简单的Gallery视图演示项目”旨在提供一个基础的实现,帮助开发者理解如何在自己...

    ListView中嵌入Gallery

    然后,我们需要创建一个适配器,该适配器既要负责ListView的数据,也要处理Gallery的数据。这里我们创建一个`MyAdapter`,继承自BaseAdapter: ```java public class MyAdapter extends BaseAdapter { private ...

    Gallery控件的左右滑动切换图片

    `Gallery`通常与`ArrayAdapter`一起使用,将数据绑定到每个子视图。首先,你需要创建一个适配器,填充数据,然后将其设置到`Gallery`上: ```java ArrayList&lt;String&gt; imageList = new ArrayList(); // 假设这里存储...

Global site tag (gtag.js) - Google Analytics