Java 在Android中查看viewpager和TableLayout中的可见性检入片段

Java 在Android中查看viewpager和TableLayout中的可见性检入片段,java,android,android-layout,android-fragments,android-viewpager,Java,Android,Android Layout,Android Fragments,Android Viewpager,我有个奇怪的问题 实现 我在ViewPager中有4个Fragments,附带TabLayout。第一个是二维码扫描仪,它显示一个摄像头。我只想在片段可见时启动相机。为此,我重写了片段的方法setUserVisibleHint @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(isVisibleToUse

我有个奇怪的问题

实现

我在
ViewPager
中有4个
Fragment
s,附带
TabLayout
。第一个是二维码扫描仪,它显示一个摄像头。我只想在
片段
可见时启动相机。为此,我重写了
片段的方法
setUserVisibleHint

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);
    if(isVisibleToUser) {
        checkPermissionForCamera();        //it checks permission and start camera
    } else {
        stopCamera();
    }
}
而且它工作得非常好

所需的

现在,我想实现的是,当
片段
不可见(或通过滚动可见)时,它会在摄影机上显示一个背景视图,这样就可以看到覆盖物,而不是摄影机。如下图所示

为此,我编辑了
startCamera
stopCamera
,现在它看起来如下所示

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
    }
}
但是灰色的封面只有第一次可以看到,剩下的时间我打开相机,看到滚动的画面,如下图所示

我还试图覆盖
OnPageChangeListener
onPageScrolled
,但没有成功。这就是我所做的

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) {

    }
});

请尝试以下任一方法:

1-覆盖设置可见性:

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

   super.setMenuVisibility(visible);
}

2-检查
yourFragment.isResumed()
而不是
isVisible()

我不能使用第二个,第一个不起作用。还是一样的结果。我想我也遇到了类似的问题,我的解决方案是在转换时使用一些页面转换器。你能详细说明一下吗?即使用ViewPager.PageTransformer