2016-02-17 83 views
0

現在我有一個查看多個片段的尋呼機。停止查看尋呼機從開始下一個尋呼機前看到

其實我在一個片段中替換視圖,但是我有這個問題。

我在每個單個視圖中顯示一個gif圖像。所以當我在頁面1中時,圖像2中的gif開始它的動畫。

我需要保持gif不動畫,直到它在屏幕上可見爲止。

我使用setUserVisibleHint,但它沒有添加任何改進或解決方案。

有沒有解決這個問題的建議?

在此先感謝。

這裏是我的代碼片段

public class WalkThroughFragment extends Fragment implements View.OnClickListener { 

public CacheClass cacheClass; 
public View view; 
private int pageNumber = 1; 
private TextView doneWalkThrough; 
private LinearLayout linearLayout; 
private GifImageView gifImageView, gifImageView2, gifImageView3, gifImageView4, gifImageView5; 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    view = inflater.inflate(R.layout.item_walkthrough, container, false); 
    return view; 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    this.view = view; 
    Bundle bundle = this.getArguments(); 
    if (bundle != null) { 
     if (bundle.getInt("pageNumber") != 0) { 
      pageNumber = bundle.getInt("pageNumber"); 
     } 
    } 
    cacheClass = new CacheClass(getActivity()); 

    gifImageView = (GifImageView) view.findViewById(R.id.imageViewGif); 
    gifImageView.setFreezesAnimation(true); 
    gifImageView.setVisibility(View.GONE); 

    gifImageView2 = (GifImageView) view.findViewById(R.id.imageViewGif); 
    gifImageView2.setFreezesAnimation(true); 
    gifImageView2.setVisibility(View.GONE); 

    gifImageView3 = (GifImageView) view.findViewById(R.id.imageViewGif); 
    gifImageView3.setFreezesAnimation(true); 
    gifImageView3.setVisibility(View.GONE); 

    gifImageView4 = (GifImageView) view.findViewById(R.id.imageViewGif); 
    gifImageView4.setFreezesAnimation(true); 
    gifImageView4.setVisibility(View.GONE); 

    gifImageView5 = (GifImageView) view.findViewById(R.id.imageViewGif); 
    gifImageView5.setFreezesAnimation(true); 
    gifImageView5.setVisibility(View.GONE); 

    linearLayout = (LinearLayout) view.findViewById(R.id.walkThroughLayOut); 
    doneWalkThrough = (TextView) view.findViewById(R.id.doneWalkThrough); 
    doneWalkThrough.setOnClickListener(this); 

    if (this.getUserVisibleHint()) { 
     setUserVisibleHint(true); 
    } else { 
     linearLayout.setBackgroundColor(Color.BLUE); 
    } 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    gifImageView.destroyDrawingCache(); 
} 

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    if (isVisibleToUser) { 

     if (getView() != null) { 
      switch (pageNumber) { 
       case 1: 
        gifImageView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        gifImageView.setBackgroundResource(R.drawable.first_gif); 
        gifImageView.setVisibility(View.VISIBLE); 
        linearLayout.setBackgroundColor(Color.GREEN); 
        break; 

       case 2: 
        gifImageView2.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        gifImageView2.setBackgroundResource(R.drawable.second_gif); 
        gifImageView2.setVisibility(View.VISIBLE); 
        linearLayout.setBackgroundColor(Color.BLUE); 
        break; 

       case 3: 
        gifImageView3.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        gifImageView3.setBackgroundResource(R.drawable.third_gif); 
        gifImageView3.setVisibility(View.VISIBLE); 
        linearLayout.setBackgroundColor(getResources().getColor(R.color.light_blue)); 
        break; 

       case 4: 
        gifImageView4.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        gifImageView4.setBackgroundResource(R.drawable.forth_gif); 
        gifImageView4.setVisibility(View.VISIBLE); 
        linearLayout.setBackgroundColor(Color.YELLOW); 
        break; 

       case 5: 
        gifImageView5 = (GifImageView) view.findViewById(R.id.imageViewGif); 
        gifImageView5.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
        gifImageView5.setVisibility(View.VISIBLE); 
        gifImageView5.setBackgroundResource(R.drawable.fifth_gif); 
        try { 
         GifDrawable gifFromResource = new GifDrawable(getResources(), R.drawable.fifth_gif); 
         int duration = gifFromResource.getDuration(); 
         new Handler().postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           doneWalkThrough.setVisibility(View.VISIBLE); 
          } 

         }, duration); 
         gifFromResource.stop(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        break; 
      } 
     } 
    } 

} 

@Override 
public void onClick(View v) { 
    ((WalkThroughActivity) getActivity()).switchIntent(); 
} 

}

+0

嘗試加入'super.setUserVisibleHint(isVisibleToUser);'在** ** setUserVisibleHint方法 –

+0

這是viewpager正常行爲的最頂端,它就像渲染列表視圖項目。你已經完成了工作,應該像這裏說的那樣工作:http://stackoverflow.com/a/12523627/1239911 – Amt87

+0

要在ViewPager中獲得片段可見性,請使用http://stackoverflow.com/a/12523627/919150 – AndreyICE

回答

1

你似乎忘記調用超級方法您setUserVisibleHint方法。試着做以下,看看它是否有助於

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); // call to super added 
    if(isVisibleToUser){ 
     // do your stuff here 
    } 
} 
+0

謝謝,現在工作正常。 –

相關問題