我的APP应该根据一些变量显示和/或隐藏图像。这是代码:
final ImageView greenSquare = (ImageView) findViewById(R.id.greensquare);
final ImageView greenBigSquare = (ImageView) findViewById(R.id.greenBIGsquare);
if (a) {
if (b) {
b = false;
a = false;
greenSquare.setVisibility(View.INVISIBLE);
greenBigSquare.setVisibility(View.VISIBLE);
} else {
b = true;
}
} else {
if (c) {
a = !a;
greenSquare.setVisibility(View.VISIBLE);
greenBigSquare.setVisibility(View.INVISIBLE);
}
}
这就是XML
<ImageView
android:id="@+id/greenBIGsquare"
android:visibility="invisible"
opencv:srcCompat="@color/colorFollowMe" />
<ImageView
android:id="@+id/greensquare"
android:visibility="visible"
opencv:srcCompat="@color/colorAccent" />
但它没有正确运行而且它会崩溃。
这里是logcat
01-29 20:20:18.487 6535-6667 / pinwheel.redblock E / AndroidRuntime:FATAL EXCEPTION:Thread-331 处理:pinwheel.redblock,PID:6535 android.view.ViewRootImpl $ CalledFromWrongThreadException:只有 创建视图层次结构的原始线程可以触及其视图。 在android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6556) 在 android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:942) 在android.view.ViewGroup.invalidateChild(ViewGroup.java:5081) 在android.view.View.invalidateInternal(View.java:12719) 在android.view.View.invalidate(View.java:12683) 在android.view.View.setFlags(View.java:10640) 在android.view.View.setVisibility(View.java:7431) 在android.widget.ImageView.setVisibility(ImageView.java:1469) 在 pinwheel.redblock.MainActivity_Show_camera.onCameraFrame(MainActivity_Show_camera.java:492) 在 org.opencv.android.CameraBridgeViewBase.deliverAndDrawFrame(CameraBridgeViewBase.java:391) 在 pinwheel.redblock.PortraitCameraView.access $ 400(PortraitCameraView.java:21) 在 pinwheel.redblock.PortraitCameraView $ CameraWorker.run(PortraitCameraView.java:289) 在java.lang.Thread.run(Thread.java:818)
任何人都可以帮助我吗?谢谢
答案 0 :(得分:0)
尝试使用@UiThread
答案 1 :(得分:0)
试试这个:
runOnUiThread(new Runnable() {
@Override
public void run() {
greenSquare.setVisibility(View.INVISIBLE);
greenBigSquare.setVisibility(View.VISIBLE);
}
});
在更改可见性期间也在您的else块中使用它。
涉及用户界面的任何操作都必须在主线程或UI线程中完成