0

我在 ListView 中的一行的布局中有一个框架布局。当列表视图中出现项目时,将触发 AnimationDrawable。

这在 Nexus 4 和 Nexus 5 上运行良好。我不得不从使用 view.setBackground 更改为 view.setBackgroundDrawable 以支持稍旧的设备。进行此更改并没有在任何 Nexus 设备上破坏它。它也适用于旧的姜饼设备。

在 HTC One V 上,运行 4.03。AnimationDrawable 永远不会出现。但是,如果我对行 xml 文件进行硬编码以显示标准可绘制对象,而不是动画绘制对象,则它看起来很好。

这是animationdrawable的xml文件

<item
    android:drawable="@drawable/alert_red"
    android:duration="700"/>
<item
    android:drawable="@drawable/alert_red_glow"
    android:duration="700"/>

</animation-list>

这是启动动画的代码

@SuppressWarnings("deprecation")
        public void startGlowingRow() {
            notificationStatus
                    .setBackgroundDrawable(getResources().getDrawable(
                                R.drawable.glowing_emergency_notification));
            glowRequest = new GlowRequest();
            notificationStatus.post(glowRequest);

        }

        public void stopGlowingRow() {
            try {
                // Remove any callbacks to make background glowing
                if (glowRequest != null)
                    notificationStatus.removeCallbacks(glowRequest);

                glowDrawable = (AnimationDrawable) notificationStatus
                        .getBackground();
                glowDrawable.stop();
            } catch (ClassCastException cce) {
                // Not the correct background in view so don't try to stop
            }
        }

        // Runnable which sets glowing effect after view has loaded
        private class GlowRequest implements Runnable {

            public void run() {

                glowDrawable = (AnimationDrawable) notificationStatus
                        .getBackground();
                glowDrawable.start();
            }

        }
4

1 回答 1

0

我终于想通了。这是因为包含动画的视图使用填充来显示它的背景。当我更改它以使其第一个孩子使用边距时,它工作得很好

于 2013-12-16T16:48:25.347 回答