为什么我不能在android studio中设置我的图像的可见性?

时间:2017-01-29 18:50:19

标签: java android android-layout

我的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)

任何人都可以帮助我吗?谢谢

2 个答案:

答案 0 :(得分:0)

尝试使用@UiThread

注释该方法

答案 1 :(得分:0)

试试这个:

 runOnUiThread(new Runnable() {
     @Override
     public void run() {

        greenSquare.setVisibility(View.INVISIBLE);
        greenBigSquare.setVisibility(View.VISIBLE);

    }
});

在更改可见性期间也在您的else块中使用它。

涉及用户界面的任何操作都必须在主线程或UI线程中完成