使视图一一可见;安卓

策划大师1992

我在使视图可见方面遇到了麻烦。如图所示:它们确实都出现了,但是是同时出现的,而我想在它们之间稍加延迟地展示它们。目前,我有以下代码,应该更加清楚:

public void performExperiment (View v) {
    Log.i(TAG, "Experiment has started on view: " + v);
    final ArrayList<FocusPoint> permutation = new ArrayList<>(Arrays.asList(focusPoints));
    Collections.shuffle(permutation);

    for (FocusPoint fp: permutation) {
        try {
            Thread.sleep(1000);
            fp.setVisibility(ImageView.VISIBLE);
            //fp.invalidate();
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(TAG, "Sleep failed");
        }
    }
}

FocusPoint类是Android中ImageView的扩展,并且在单击按钮时会调用该方法。

需要发生的是,所有视图以随机顺序显示在屏幕上,并且在它们之间有一秒钟。但是,此代码等待16秒(视图总数为16),然后立即显示所有视图。我试图使视图无效以重绘它,并且还尝试从try-catch块中取出“ fp.setVisibility(ImageView.VISIBLE)”,但两者均无效。(其中后者显然不起作用,我没想到它真的起作用,但我真的很绝望:P)我现在已经搜索了几个小时,而且都没有StackOverflow页和其他论坛/文档对此问题有一个答案。在循环继续到下一个循环之前,如何确保绘制焦点?

vzsg

使用Thread.sleep(ms)延迟UI线程是一个非常危险的想法,并且如您所见,它不会导致任何问题。通过将线程阻塞16秒钟,您可以有效地冻结该时间段内的应用程序-包括这段时间内可能发生的任何重绘和其他事件处理。永远不要那样做。

相反,请使用Handler和及其postDelayed(Runnable, ms)方法来计划将来的可见性更改。处理程序通过将消息添加到事件循环中来工作,因此它们不会破坏正常行为。

检查您的代码的此修改版本:

private static final long FP_SHOW_DELAY_MS = 1000;
private Handler handler = new Handler();

public void performExperiment (View v) {
    Log.i(TAG, "Experiment has started on view: " + v);
    final ArrayList<FocusPoint> permutation = new ArrayList<>(Arrays.asList(focusPoints));
    Collections.shuffle(permutation);

    for (int i = 0; i < permutation.size(); i++) {
        final FocusPoint fp = permutation.get(i);

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                fp.setVisibility(View.VISIBLE);
            }
        }, (i + 1) * FP_SHOW_DELAY_MS);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ListView中更新某些不可见项的视图?[安卓]

来自分类Dev

如何在ListView中更新某些不可见项的视图?[安卓]

来自分类Dev

如何更改同一可见项的gridview的列数。安卓

来自分类Dev

安卓编辑文本。只读模式下的文本可见性

来自分类Dev

如何从 OnCreate 方法外部更改小部件可见性?Java安卓工作室

来自分类Dev

Android 可见视图

来自分类Dev

卡视图不可见

来自分类Dev

卡视图不可见

来自分类Dev

卡视图不可见

来自分类Dev

列表视图中arrayadapter的NULL POINTER EXCEPTION。安卓

来自分类Dev

列表视图中arrayadapter的NULL POINTER EXCEPTION。安卓

来自分类Dev

何时使用自定义视图?- 安卓

来自分类Dev

如何结合监听类和视图类?| 安卓

来自分类Dev

Android + Robotium:是用户可见的ViewPager视图

来自分类Dev

自定义视图不可见

来自分类Dev

XIB子视图不可见

来自分类Dev

CAGradientLayer导致子视图不可见

来自分类Dev

如何通知视图不再可见

来自分类Dev

检查Eclipse视图是否可见

来自分类Dev

使模板视图对外部参数可见

来自分类Dev

CAGradientLayer导致子视图不可见

来自分类Dev

相对布局中不可见的视图

来自分类Dev

数据网格视图可见性

来自分类Dev

CoordinatorLayout 在设计视图中不可见

来自分类Dev

文档在嵌入视图中不可见

来自分类Dev

RecyclerView - 在 for 循环中一一更新 item imageView 的可见性

来自分类Dev

QT + OpenSSL +安卓

来自分类Dev

NullPointerException:SetOnClickListener(this)-安卓

来自分类Dev

安卓上的蓝牙