【发布时间】: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 不可见(或通过滚动可见)时,它会在相机上显示一个带有背景的视图,这样可以看到封面而不是相机。如下图。
为此,我编辑了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
}
}
但灰色的封面仅在第一次可见,其余时间我打开相机并滚动查看,如下所示。
我也尝试覆盖onPageScrolled 的OnPageChangeListener,但没有成功。这就是我所做的。
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