2012-02-06 4 views
3

ViewPager를 사용하여 인터넷에서 가져와야하는 무한한 이미지 모음을 찾아 볼 수 있습니다.다음 페이지의 콘텐츠가 준비 될 때까지 ViewPager의 페이지 전환을 피하십시오.

이미지가 이미로드되어 있지 않으면 다음/이전 페이지로 변경하고 싶지 않습니다. 따라서 사용자가 오른쪽/왼쪽으로 스 와이프하면 현재 이미지가 계속 표시되고 진행률 막대가 위로 회전하며 다음/이전 페이지로의 변경은 이미지가 준비 될 때까지 수행되지 않습니다. 즉각적인 페이지가 바뀌면 진행률 표시 줄이 사라집니다.

지금은 ViewPager 및 FragmentStatePageAdapter의 하위 뷰에 대해 다음 레이아웃을 사용하여 구현하려고했습니다. 내가 ProgressBar를 볼 수 있도록 자사의 onCreateView에서

  • 다음 조각에서
    <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> 
    

    본인은 아래의 단계를 수행합니다.
  • 동일한 방법으로 이미지를 가져 와서 바이트 스트림을 비트 맵으로 디코딩하는 스레드를 시작합니다.
  • 비트 맵을 사용할 수있게되면 스레드는 ImageView에 비트 맵을 설정하고 처리기를 보이게하고 진행률 표시 줄을 숨기는 처리기에 메시지를 전송합니다.

이 접근법의 문제점은 다음과 같습니다. 사용자가 스 와이프 할 때 이미지를 가져 오지 않은 경우 이전 이미지가 사라지고 새 이미지를 사용할 수있을 때까지 회전 진행률 막대가 표시됩니다. 계속해서 이미지를 보는 것이 훨씬 더 좋을 것입니다.

누구나 ViewPager로 이것을 구현할 수 있었는지 또는 코드에서 변경할 수있는 것을 알고 있습니까?

미리 감사드립니다.

답변

2

나는 거의 동일했다. 당신이 당신의 이미지 viewpager을 해제하는 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() 방법을 사용하여로드하는 경우

//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; 
} 
} 

onPostExecute() 세트 :

당신은을 통해 어댑터/비활성화보기 페이징을 활성화 할 수 있습니다 이미지를 다시 활성화하고 ViewPager을 다시 활성화하십시오. 완벽하게 작동합니다.