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