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

我不能使用第二个,第一个不工作。仍然是同样的结果。 –

相关问题