【问题标题】:view visibility check in fragment inside viewpager and tablayout in Android在 Android 中的 viewpager 和 tablayout 中的片段中查看可见性检查
【发布时间】:2017-06-13 05:27:48
【问题描述】:

我有一个奇怪的问题。

实现

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

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

而且它工作得非常好。

希望

现在,我想要实现的是,当Fragment 不可见(或通过滚动可见)时,它会在相机上显示一个带有背景的视图,这样可以看到封面而不是相机。如下图。

为此,我编辑了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
    }
}

但灰色的封面仅在第一次可见,其余时间我打开相机并滚动查看,如下所示。

我也尝试覆盖onPageScrolledOnPageChangeListener,但没有成功。这就是我所做的。

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

    }
});

【问题讨论】:

  • 我想我也遇到过类似的问题,我的解决方案是在转换时使用了一些页面转换器
  • 您能详细说明一下吗?
  • 即使用 ViewPager.PageTransformer

标签: java android android-layout android-fragments android-viewpager


【解决方案1】:

尝试以下任一方法:

1- 覆盖 setMenuVisibility :

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

   super.setMenuVisibility(visible);
}

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

【讨论】:

  • 我不能用第二个,第一个也不行。结果还是一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多