我有一个自定义列表视图,可以显示用户和照片 我从API中检索数据,它提供了JSON输出,
我的问题是列表视图不能平滑滚动,它会挂起一秒钟并滚动,它会重复相同直到我们到达终点。
我认为可能是因为我在UI线程上运行与网络相关的操作,但即使在完成加载后它仍会继续这样做?
我的自定义Listview的结构是
<TextView style="@style/photo_post_text"
android:id="@+id/photo_post_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="demotext"
/>
<ImageView
android:id="@+id/userimage"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/pi"
/>
答案 0 :(得分:7)
使用AsyncTask加载图片。只要您在UI线程中执行此类任务,滚动就不会顺畅。
看看this tutorial。它将帮助您了解您需要实现的内容,而无需其他库。另外请记住,在滚动时,行一直在重绘,没有真正的“完成”加载。您还可以考虑使用图像缓存,例如使用ConcurrentHashMap可以放置已加载的图片。
答案 1 :(得分:3)
对于Image Load,快速使用此lib,加载图像速度非常快 https://github.com/bumptech/glide
对于列表视图滚动平滑使用strictMode .IT写入活动onCreate()方法
protected void onCreate(Bundle savedInstanceState) {
//StrictMode for smooth list scroll
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectDiskReads().detectDiskWrites().detectNetwork().penaltyLog().build());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*-----
ListView
Custom Adapter set data....
------*/}
关于添加到onCreate()方法的更多内容
listView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCoun) {
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState != 0)
listView.getAdapter()).isScrolling = true;
else {
adapter.isScrolling = false;
adapter.notifyDataSetChanged();
}
} });
添加到Adapter类
public static Boolean isScrolling = true;
答案 2 :(得分:2)
可能有很多原因导致ListView不能平滑滚动。您可以确保使用一些最佳实践,例如
getView()
中的视图AsyncTask
从网络下载JSON,所有与网络相关的处理都在单独的线程中完成。一旦你确定你已经涵盖了上述内容,它应该可以正常运作。