繁体   English   中英

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

[英]Why can't i set the visibility of my images in android studio?

我的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:致命例外: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)

有谁能够帮助我? 谢谢

尝试使用@UiThread注释方法

尝试这个:

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

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

    }
});

在更改可见性时,也可以在您的else块中使用它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM