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`作为一个经典的水平滚动视图容器,在Android早期版本中非常受欢迎,它允许用户通过简单的左右滑动来浏览一系列的项目。然而,在实际应用中可能会遇到一个问题:当我们为`Gallery`中的每一个`Item`添加点击...
- `LayoutParams.java`: 子视图的布局参数类,定义了子视图在Gallery中的位置和大小。 - `GestureDetector.java`: 处理用户的触摸事件,如滑动、点击等。 - `OnItemSelectedListener.java`: 监听用户选择项改变的...
在"HorizontalScrollView实现Gallery"这个项目中,开发者通过继承LinearLayout来构建一个自定义的视图容器,这是因为LinearLayout可以方便地管理子视图的排列方式,支持垂直和水平方向的布局。通过继承LinearLayout...
在`onMeasure`和`onLayout`方法中,Gallery会计算并布局子视图的位置,确保它们能在水平方向上正确显示。 二、触摸事件处理 在`onTouchEvent`方法中,Gallery通过检测MotionEvent的ACTION_DOWN、ACTION_MOVE和...
例如,`android:gravity`用于设置子视图在Gallery中的对齐方式。 5. **自定义滚动行为**:Gallery控件的滚动速度和动画效果可以通过覆写`onFling()`和`onScroll()`方法来自定义。 6. **图片加载库**:由于Gallery...
利用Gallery所写的视图,可以左右滑动选取图片,采用UTF—8的格式
1. **测量与布局**:在`onMeasure()`方法中,Gallery会计算其所有子视图的大小,并确保它们能在屏幕上正确显示。这个过程涉及到对MeasureSpec的理解,以及如何根据屏幕尺寸调整子视图的大小。 2. **滚动处理**:...
在Android开发中,"Gallery循环删除图片"是一个常见的需求,主要涉及到 Gallery 组件的使用、Java反射机制的应用以及图片管理。下面将详细讲解这些知识点。 首先,Gallery 是 Android 提供的一种特殊的视图组件,...
为了模拟Gallery的焦点和选中效果,我们可以监听HorizontalScrollView的滚动事件,当用户滚动到某个子视图时,更新其他子视图的状态,如改变背景色或添加边框,以突出当前选中项。 5. **优化性能**: 当...
你可以创建一个`GestureDetector`实例,然后在`ViewPager`和`Gallery`的触摸事件处理中使用它。根据`GestureDetector`的回调方法,决定事件应该被哪个组件消费。 3. **设置OnTouchListener**: 为`ViewPager`和`...
使用`addView()`方法向`Gallery`中添加子视图,每个子视图可以是任何可绘制的对象,如`ImageView`。 接下来,我们讨论`ImageSwitcher`组件。`ImageSwitcher`是`ViewSwitcher`的子类,专为展示图片切换设计,常与`...
在onMeasure()中,Gallery会测量每个子视图的大小,并根据屏幕尺寸来确定显示的子视图数量。在onLayout()中,子视图会被按照一定的顺序布局,形成一个可滚动的横轴列表。 Gallery的关键特性是它可以水平滚动,用户...
在Android开发中,`Gallery`组件是早期用于展示一系列横向滑动的图片或视图的控件,类似于轮播图。然而,`Gallery`在Android API Level 16(Jelly Bean)之后已经被弃用,取而代之的是更强大且易用的`RecyclerView`...
这通常通过在`Gallery`的`onInterceptTouchEvent()`方法中返回`false`来实现,这样所有的触摸事件都会直接传递给子视图处理。 此外,为了优化性能和用户体验,开发者可能还考虑了图片的内存管理和加载策略,如使用`...
1. **自定义ViewGroup**:你需要继承自`ViewGroup`,并重写`onLayout()`方法来确定子视图的位置,以及`onTouchEvent()`来处理触摸事件。 2. **计算滚动位置**:在处理触摸事件时,需要计算出用户的滑动距离,然后...
Gallery通过重写onMeasure()和onLayout()方法来实现自定义布局,确保每个子视图(通常是ImageView)能够在水平轴上正确地排列和显示。 2. **适配器**:Gallery使用Adapter来填充数据。Adapter是Android中用于连接...
1. **Gallery.java** - 这是Gallery组件的主要实现类,包含了触摸事件处理、滚动逻辑和布局管理。其中,`onTouchEvent()`方法是处理用户触摸事件的地方,通过计算滑动距离来决定滚动的位移。`onMeasure()`和`...
在Android开发中,Gallery视图是一种非常有用的控件,它允许用户通过左右滑动来浏览一系列的图片或项目。这个项目“Android-这是一个简单的Gallery视图演示项目”旨在提供一个基础的实现,帮助开发者理解如何在自己...
然后,我们需要创建一个适配器,该适配器既要负责ListView的数据,也要处理Gallery的数据。这里我们创建一个`MyAdapter`,继承自BaseAdapter: ```java public class MyAdapter extends BaseAdapter { private ...
`Gallery`通常与`ArrayAdapter`一起使用,将数据绑定到每个子视图。首先,你需要创建一个适配器,填充数据,然后将其设置到`Gallery`上: ```java ArrayList<String> imageList = new ArrayList(); // 假设这里存储...