我使用的是ViewPager,因此用户可以浏览需要从互联网上获取的无限图像集。
我不想更改为下一页/上一页,除非已加载其图像。因此,如果用户向右/向左滑动,当前图像仍将显示,其中进度条旋转在顶部,并且在图像准备好之前不会执行对下一页/上一页的更改。在那个瞬间,页面会交换,进度条会消失。
目前我正尝试使用以下布局为ViewPager和FragmentStatePageAdapter的子视图实现此功能。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/imageview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:contentDescription="@string/label_painting"
android:visibility="gone" />
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:visibility="gone" />
</FrameLayout>
在片段中,我按照下面列出的步骤进行操作:
我所遵循的这种方法的问题是,如果在用户滑动时尚未提取图像,则前一图像消失,并且他看到旋转的进度条,直到新图像可用。继续看图像会好得多。
是否有人能够使用ViewPager实现此功能,或者知道我的代码中可以更改哪些内容?
提前致谢。
答案 0 :(得分:2)
我几乎一样。
您可以通过以下方式在适配器中启用/禁用视图分页:
//disable viewpager
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.enabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
}
如果您加载图片,请使用AsyncTask
private class DownloadImageTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
使用onPreExecute()
方法停用viewpager,并在onPostExecute()
中设置图片并重新启用ViewPager
。
这对我来说很完美