簡體   English   中英

在Android中的viewpager和tablayout中的片段中查看可見性檢查

[英]view visibility check in fragment inside viewpager and tablayout in Android

我有一個奇怪的問題。

實現

我在附有TabLayoutViewPager有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不可見(或通過滾動可見)時,它會在相機上顯示一個背景為背景的視圖,以便該封面(而不是相機)可見。 如下圖所示。

見灰色部分

為此,我編輯了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
    }
}

但是,只有在第一次看到灰色蓋子時,其余時間我會打開相機並在其上滾動視圖,如下所示。

見視圖部分

我也嘗試重寫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-覆蓋setMenuVisibility:

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

   super.setMenuVisibility(visible);
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM