我想在用户点击时反转SurfaceView上视图的可见性。单击可使视图在屏幕上可见。下一次单击使其不可见,依此类推。
我已经尝试了view.setVisibility(Integer.reverse())
和view.setVisibility(View.GONE ^ view.getVisibility())
,但没有一个可以使用。后者甚至没有编译。
答案 0 :(得分:2)
视图的可见性不是二进制,因为不仅有两种状态。视图可以分为三种状态:VISIBLE,INVISIBLE或GONE。您要在哪两个之间切换?
通常您可以使用以下内容设置视图的可见性:
class UseCase < ApplicationRecord
has_and_belongs_to_many :educational_objectives
end
class EducationalObjective < ApplicationRecord
has_and_belongs_to_many :use_cases
end
class EducationalObjectivesUseCase < ApplicationRecord
belongs_to :educational_objective
belongs_to :use_case
end
class UseCasesController < ApplicationController
def index
@use_cases = UseCase.all.
order(:use_case).
joins(:educational_objectives).
where('educational_objectives.subject_id = ?',2)
end
end
这实际上相当于:
view.setVisibility(View.GONE);
因为View类中的三个值都是公共静态int。他们是:
view.setVisibility(8);
它们的每个幂都是2,所以在二进制中它们的值是:
public static final int VISIBLE = 0x00000000;
public static final int INVISIBLE = 0x00000004;
public static final int GONE = 0x00000008;
所以Integer.reverse()并不是你想要的。 VISIBLE总是0,从INVISIBLE到GONE你需要向左移动。
答案 1 :(得分:0)
异或二元运算将适用于当前设置状态为相同整数值或零(可见)的情况。 我编写了一个简单的测试来演示如何实现切换逻辑。
@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)
}