Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何反转视图';通过位操作提高可视性_Java_Android_Bit Manipulation - Fatal编程技术网

Java 如何反转视图';通过位操作提高可视性

Java 如何反转视图';通过位操作提高可视性,java,android,bit-manipulation,Java,Android,Bit Manipulation,我希望在用户单击时反转SurfaceView上视图的可见性。单击可使视图在屏幕上可见。下一次单击将使其不可见,依此类推。 我已经尝试了view.setVisibility(Integer.reverse())和view.setVisibility(view.GONE^view.getVisibility()),但都不起作用。后者甚至不编译 视图的可见性不是二进制的,因为视图中不只有两种状态。视图可以处于三种状态:可见、不可见或消失。你想在哪两个之间切换 通常,您可以使用以下内容设置视图的可见性:

我希望在用户单击时反转SurfaceView上视图的可见性。单击可使视图在屏幕上可见。下一次单击将使其不可见,依此类推。

我已经尝试了
view.setVisibility(Integer.reverse())
view.setVisibility(view.GONE^view.getVisibility())
,但都不起作用。后者甚至不编译

视图的可见性不是二进制的,因为视图中不只有两种状态。视图可以处于三种状态:可见、不可见或消失。你想在哪两个之间切换

通常,您可以使用以下内容设置视图的可见性:

view.setVisibility(View.GONE);
这实际上相当于:

view.setVisibility(8);
因为这三个值都是View类中的公共静态int。它们是:

public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
它们都是2的幂,所以在二进制中它们的值是:

VISIBLE =   ...0000;
INVISIBLE = ...0100;
GONE =      ...1000;

所以Integer.reverse()并不是您真正想要的。“可见”始终为0,要从“不可见”变为“消失”,您需要向左移动。

视图的可见性不是二进制的,因为在视图中不只有两种状态。视图可以处于三种状态:可见、不可见或消失。你想在哪两个之间切换

通常,您可以使用以下内容设置视图的可见性:

view.setVisibility(View.GONE);
这实际上相当于:

view.setVisibility(8);
因为这三个值都是View类中的公共静态int。它们是:

public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
它们都是2的幂,所以在二进制中它们的值是:

VISIBLE =   ...0000;
INVISIBLE = ...0100;
GONE =      ...1000;

所以Integer.reverse()并不是您真正想要的。可见始终为0,要从不可见变为消失,您需要向左移动。

如果当前设置状态为相同的整数值或零(可见),则XOR二进制操作将适用。 我编写了一个简单的测试来演示如何实现切换逻辑

    @Test
    fun toggleVisibility() {
        // toggle GONE
        var visibility = VISIBLE
        visibility = visibility xor GONE
        assertEquals(visibility, GONE)

        visibility = visibility xor GONE
        assertEquals(visibility, VISIBLE)

        // toggle INVISIBLE
        visibility = VISIBLE
        visibility = visibility xor INVISIBLE
        assertEquals(visibility, INVISIBLE)

        visibility = visibility xor INVISIBLE
        assertEquals(visibility, VISIBLE)
    }


异或二进制操作将适用于当前设置状态为相同整数值或零(可见)的情况。 我编写了一个简单的测试来演示如何实现切换逻辑

    @Test
    fun toggleVisibility() {
        // toggle GONE
        var visibility = VISIBLE
        visibility = visibility xor GONE
        assertEquals(visibility, GONE)

        visibility = visibility xor GONE
        assertEquals(visibility, VISIBLE)

        // toggle INVISIBLE
        visibility = VISIBLE
        visibility = visibility xor INVISIBLE
        assertEquals(visibility, INVISIBLE)

        visibility = visibility xor INVISIBLE
        assertEquals(visibility, VISIBLE)
    }


此处不允许使用
标志
@MikeM。在我键入代码时,这实际上是一个语法错误。您不会使用位操作来执行此操作,因为可见性是一个三元状态,而不是位字段。如果您只想切换到可见,标准方式是view.setVisibility(view.getVisibility()==view.gone?view.visible:view.gone);然而,如果你不想包含不可见的可能性,你需要更清楚地知道你想要什么。为什么你需要使用位操作来实现这一点?我正在寻找一种通过一元或二元运算符实现的简洁方法。但是,这似乎是不可能的。
此处不允许使用标志
@MikeM。在我键入代码时,这实际上是一个语法错误。您不会使用位操作来执行此操作,因为可见性是一个三元状态,而不是位字段。如果您只想切换到可见,标准方式是view.setVisibility(view.getVisibility()==view.gone?view.visible:view.gone);然而,如果你不想包含不可见的可能性,你需要更清楚地知道你想要什么。为什么你需要使用位操作来实现这一点?我正在寻找一种通过一元或二元运算符实现的简洁方法。然而,这似乎是不可能的。