如何解决无法更改除 onCreate 方法以外的视图的可见性
我无法更改其他函数而不是 onCreate
方法中的视图可见性。它仅在 onCreate
时工作被调用。
public class CameraXActivity extends AppCompatActivity {
...
public Group fipGroup;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.camerax_layout); // Created xml using constraintLayout.
//intial setup
fipGroup = (Group)findViewById(R.id.fip_group);
startCamera();
//hideFipGroup(); <<--- This is working
}
private void hideFipGroup() {
Log.d(TAG,"=== hideFipGroup ===");
fipGroup.setVisibility(View.INVISIBLE);
}
private void startCamera() {
CameraX.unbindAll();
preview = setPreview();
imageAnalysis = setImageAnalysis();
//bind to lifecycle:
CameraX.bindToLifecycle(this,preview,imageAnalysis);
preview.enableTorch(true);
}
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image,int rotationDegrees) {
hideFipGroup() // Exactly,Failed at this place.
}
}
)
}
}
编辑更新:
未能更新 analyze
的 imageAnalysis
方法。只是为了测试,称为显示在 UI 上的 toast 消息。但我无法控制 UI。
private void raiseToast(String msg) {
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER,500);
toast.show();
}
});
}
解决方法
请尝试 view.post 或 runOnUIThread 方法。
就是这样。
private ImageAnalysis setImageAnalysis() {
hideFipGroup() // This is working
imageAnalysis.setAnalyzer(
new ImageAnalysis.Analyzer() {
@Override
public void analyze(ImageProxy image,int rotationDegrees) {
fipGroup.post(new Runnable() {
@Override
public void run() {
hideFipGroup(); // Exactly,Failed at this place.
}
});
}
}
)
}
或者你可以简单地在 hideFipGroup() 方法中调用 view.post() 方法
private void hideFipGroup() {
Log.d(TAG,"=== hideFipGroup ===");
fipGroup.post(new Runnable() {
@Override
public void run() {
fipGroup.setVisibility(View.INVISIBLE);
}
});
}
,
problem 在约束布局上具有组可见性。
private void setGroupVisiblity(Group group,int visibility) {
group.setVisibility(visibility);
group.requestLayout();
}
或手动关闭组中的每个视图:
private void setGroupVisibility(ConstraintLayout layout,Group group,Integer visibility) {
int[] refIds = group.getReferencedIds();
for (int id : refIds) {
layout.findViewById(id).setVisibility(visibility);
}
}
或升级到ConstraintLayout version 2.0.0 beta 6
来源:Can't set visibility on constraint group
,你应该检查你调用的函数。请记住,您只能在主线程中更新 UI
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。