我有一个奇怪的问题。查看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
是不可见的(或正在滚动显示),这表明与背景在相机的视图,以便不用相机,那封面是可见的。像下面的图片。
对于它,我编辑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) {
}
});
,我想我也有过类似的问题,我的解决方案是在转换时使用一些页面变压器 – nkoroi
您会详细介绍一下吗? –
即使用ViewPager.PageTransformer – nkoroi