Android - 如何判断特定视图何时已渲染?

问题描述 投票:0回答:2

我有一个常规按钮,我想在其上显示计时器。因此,想象一下按钮的文本每秒都会变化,就像倒计时器一样。但是,我需要这个计时器仅在按钮完全渲染并准备好在屏幕上显示时启动。

现在我正在片段的

AsyncTask
中启动计时器(这是一个
onCreateView()
)。这不是那么准确,因为我做了一些我必须做的其他加载工作。我可以将计时器从
onCreateView()
的底部开始移动,但即使这样也不是很准确。

我看到有一个

OnGlobalLayoutListener
树观察者。但我想象这是当整个视图树“即将”绘制时?我如何准确知道我的特定按钮何时呈现并对用户可见?

java android android-view android-lifecycle
2个回答
4
投票

OnGlobalLayoutListener()
是正确的去处。保证当您的按钮已布局时(“完全渲染并准备好在屏幕上显示”),它将被调用。例如,在
onCreate()
中你可以这样做:

btn = (Button) findViewById(R.id.bn);   
btn.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        new AsyncTaskTimer.execute();
        // prevent the listener to be called more than once
        btn.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }
});

0
投票

您可以创建一个自定义按钮,然后实现 onFinishInflate() 或者在初始化自定义按钮时,将其可见性设置为不可见并实现 onWindowVisibilityChanged(int)。然后,当您将按钮设置为可见时,您将启动计时器。您也可以将其设置为启动按钮,按下该按钮即可启动计时器并更改计时器按钮所需的行为。

http://developer.android.com/reference/android/view/View.html

© www.soinside.com 2019 - 2024. All rights reserved.