1

我有一個奇怪的問題。查看Android中的viewpager和tablayout片段中的可見性檢查

中安裝有一個TabLayout取得ViewPager

我有4 Fragment秒。第一個是QR碼掃描儀,顯示一個攝像頭。我只想在Fragment可見時才啓動相機。爲此,我重寫Fragment的方法setUserVisibleHint

@Override 
public void setUserVisibleHint(boolean isVisibleToUser) { 
    super.setUserVisibleHint(isVisibleToUser); 
    if(isVisibleToUser) { 
     checkPermissionForCamera();  //it checks permission and start camera 
    } else { 
     stopCamera(); 
    } 
} 

而且它工作得很好。

期望

現在,我要實現的是,當Fragment是不可見的(或正在滾動顯示),這表明與背景在相機的視圖,以便不用相機,那封面是可見的。像下面的圖片。

See the gray part

對於它,我編輯startCamerastopCamera,現在它看起來像下面,

public void startCamera() { 
    if(cameraCover != null) 
     cameraCover.setVisibility(View.GONE); 
    isCameraStarted = true; 
    mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. 
    mScannerView.startCamera(); 
} 

public void stopCamera() { 
    if(cameraCover != null) 
     cameraCover.setVisibility(View.VISIBLE); 
    if(mScannerView != null) { 
     isCameraStarted = false; 
     mScannerView.stopCamera();// Stop camera on pause 
     mScannerView.stopCameraPreview();// Stop camera preview 
    } 
} 

但灰色的蓋子是隻在第一次看到,休息的時候,我得到了相機以其滾動的視圖打開,如下所示。

See the view part

我也試着重寫的OnPageChangeListeneronPageScrolled,但沒有運氣。這是我所做的。

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

     if(position == 0) { 
      if(positionOffset > 0.7) { 
       fragment = adapter.getItemAtPosition(0); //fragment is at zero 
       if(fragment != null) { 
        if(fragment instanceof ScanQRFragment) { 
         ((ScanQRFragment) fragment).stopCamera(); 
        } 
       } 
      } 
     } 

    } 

    @Override 
    public void onPageSelected(int position) { 

    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 
+0

,我想我也有過類似的問題,我的解決方案是在轉換時使用一些頁面變壓器 – nkoroi

+0

您會詳細介紹一下嗎? –

+0

即使用ViewPager.PageTransformer – nkoroi

回答

0

嘗試以下任一方式:

1-覆蓋setMenuVisibility:

@Override 
public void setMenuVisibility(final boolean visible) { 
    if (visible) { 
     //start camera preview 
    } 

    super.setMenuVisibility(visible); 
} 

2-檢查的yourFragment.isResumed()代替isVisible()

+0

我不能使用第二個,第一個不工作。仍然是同樣的結果。 –

相關問題