原文链接:http://android.eoe.cn/topic/ui
让 ListView 平滑滚动的关键在于将程序的主线程(UI线程)从大量的处理中解脱出来。要要保证用单独的线程来进行磁盘,网络或SQL操作。想要测试你的程序的状态, 你可以开启**StrictMode** 。
使用后台线程
使用后台线程(“工作线程”)可移除主线程中德压力,以至于集中精力绘制UI。在很多案例中,利用 AsyncTask (异步任务)可以提供一种在主线程之外执行你的工作简单的方法。 AsyncTask'''自动将所有'_execute()) 请求排成队列并按顺序执行他们。这种行为对一个特定进程来说是全局性的,这意味着你不必担心创建自己的线程池。
下方所示的简单代码中,利用**AsyncTask** 在后台线程中加载图像,然后一旦完成便应用在UI中。也可以显示一个进度条来代替正在加载的图像。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 利用AsyncTask在后台线程中加载缓慢的图像
new AsyncTask<ViewHolder, Void, Bitmap>() {
private ViewHolder v;
@Override
protected Bitmap doInBackground(ViewHolder... params) {
v = params[0];
return mFakeImageLoader.getImage();
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
if (v.position == position) {
// 如果该项还未被回收, 隐藏进度条,设置并显示图像
v.progress.setVisibility(View.GONE);
v.icon.setVisibility(View.VISIBLE);
v.icon.setImageBitmap(result);
}
}}.execute(holder);
|
从Android3.0(API Level 11)起,在** AsyncTask** 中可以使用一项新的功能,你可以通过开启它来
在多处理器内核间交叉运行线程。除了调用** execute())**方法,你可以使用**executeOnExecutor())** 方法而同时执行多个请求,而这取决于可用的核心数量。
在View Holder中保存视图对象
你的代码可能在滑动** ListView**时频繁地调用**findViewById())**,而这可使效果变慢。即使在**Adapter**为了回收而返回一个已经展现出来的视图,你仍然需要查找这些元素并且更新他们。一个循环使用**findViewById())** 的方法是使用“view holder”设计模式。
一个**findViewById())** 对象存储布局内的每个组建视图的标记域,你可以立即访问而不需要反复的查询他们。首先,你需要建立一个类来保存具体的视图。例如:
1 2 3 4 5 6 |
static class ViewHolder {
TextView text;
TextView timestamp;
ImageView icon;
ProgressBar progress;
int position;}
|
然后填充**findViewById())** 并且在布局中保存它。
1 2 3 4 5 6 |
ViewHolder holder = new ViewHolder();
holder.icon = (ImageView) convertView.findViewById(R.id.listitem_image);
holder.text = (TextView) convertView.findViewById(R.id.listitem_text);
holder.timestamp = (TextView) convertView.findViewById(R.id.listitem_timestamp);
holder.progress = (ProgressBar) convertView.findViewById(R.id.progress_spinner);
convertView.setTag(holder);
|
现在你可以轻松的访问每一个视图而不需要频繁的去查询他们,这节省了宝贵的处理器周期。
相关推荐
`smoothScrollToPositionFromTop`是Android ListView中实现平滑滚动的关键方法,它结合了动画效果和精确的定位,极大地提升了用户交互体验。在实际项目中,合理运用此方法,可以为应用增添专业且流畅的用户体验。
此外,为了使滚动更平滑,我们可能还需要关注ListView的缓存机制,以及适时调整滑动速度和动画效果。例如,可以通过修改`setSmoothScrollbarEnabled(true)`和`setScrollingCacheEnabled(false)`等属性来优化滚动体验...
2. **AbsListView#startSmoothScroll()**: 这是ListView的父类AbsListView提供的方法,用于启动平滑滚动。我们可以传入一个自定义的SmoothScroller实例,让它按需滚动到列表的顶部。 3. ** OverscrollEffect**: 在...
创建一个Runnable对象,其中包含滚动逻辑,如调用ListView的`smoothScrollToPosition()`方法来平滑滚动到下一个位置。然后,将这个Runnable对象通过Handler的`postDelayed()`方法添加到消息队列中,设定一个合适的...
在实际项目中,你可能还会遇到性能优化的问题,例如ListView的滚动平滑性、内存使用等。这时,可以采用以下策略: - 使用convertView复用机制,减少视图创建。 - 在`getView()`中,避免不必要的数据计算和视图更新,...
`smoothScrollToPosition(position)` 方法提供了平滑滚动的效果,使得ListView从当前位置平滑滚动到指定的`position`。这种方法更加用户体验友好,但需要注意的是,如果直接在主线程中调用,可能不会产生预期的滚动...
这种效果通常包括但不限于平滑滚动、动态高度调整、渐变背景等,目的是提升Android应用的用户体验,使其更接近iOS的视觉风格。 在Android中,ListView是一个常用的控件,用于显示一列可滚动的项目列表。要实现...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview左划删除"是ListView的一个常见扩展功能,允许用户通过手势左滑列表项来显示一个删除按钮,进而实现快速删除操作。这...
根据需求,可能还需要自定义滚动动画,如平滑滚动、弹性滚动等,这需要对滚动逻辑进行深入定制。 通过以上步骤,我们可以创建一个功能完备的横向滚动ListView。自定义组件虽然增加了开发工作量,但也带来了更高的...
4. **平滑滚动**:`smoothScrollToPosition()`方法可以使ListView平滑地滚动到指定位置,而不是立即跳转,这样可以提供更流畅的用户体验。参数0表示滚动到列表的第一个位置。 5. **优化性能**:为了防止频繁的滚动...
在Android开发中,ListView是一种常用的组件,用于展示可滚动的多行数据列表。"android listview 拖拽效果"是指在ListView上实现的一项高级功能,允许用户通过手势拖动ListView中的每个条目(item)来改变它们的位置...
调用RecyclerView的`smoothScrollToPosition()`方法,可以实现平滑滚动到指定位置。 **四、TestHorizontalListView示例** `TestHorizontalListView`可能是一个包含上述实现的示例项目,包含了必要的XML布局文件、...
这里`smoothScrollBy()`方法用于平滑滚动,第一个参数是滚动的距离,第二个参数是滚动所需的时间。 2. 使用Runnable和postDelayed()实现自动滚动: ```java final Handler handler = new Handler(); private ...
另外,开启`setSmoothScrollbarEnabled(true)`可以平滑滚动,提高用户感知。 9. **空视图(Empty View)** 当ListView没有数据时,可以显示一个空视图告知用户。在XML布局中,将空视图作为ListView的兄弟节点,...
在Android开发中,ListView是一种常用的组件,用于展示大量的列表数据。在处理表格或者有列头的数据时,我们可能需要实现类似Excel那样固定列头的功能,以便用户在滚动内容时仍能清晰地看到列名。标题"Android ...
在Android开发中,ListView是常用的一种控件,用于展示大量数据列表。然而,有时我们希望在ListView的每一项中包含的...只要保持`HorizontalScrollView`的子视图宽度总和不超过其宽度,就可以实现平滑的水平滚动效果。
在Android开发中,ListView是用于显示大量数据列表的一个核心组件,它可以实现高效的滚动性能和自定义视图。本文将深入探讨如何在ListView中实现上下翻页效果,这通常涉及到数据加载策略、滚动监听以及适配器的巧妙...
本示例"Android Listview 列表项删除动画Demo"旨在演示如何在ListView中实现一个动态效果:当用户选择删除某个列表项时,该条目会有一个从右向左滑动的动画效果,同时,下面的列表项会平滑地填补被删除项留下的空缺...
然后,使用ListView的`smoothScrollToPosition(int position)`方法平滑滚动到目标位置。 5. **实时更新**:为了提供更好的用户体验,可以在用户滚动ListView时,自动高亮当前显示范围内的首字母。这通常通过比较...
4. **点击事件**:为悬浮条设置点击监听器,当用户点击悬浮条时,可以调用ListView的smoothScrollToPosition()方法,平滑滚动到相应的分组位置。 5. **动画效果**:为了提升用户体验,还可以添加一些过渡动画,比如...