背景TransitionDrawable不在某些设备上重绘

时间:2013-05-01 20:19:13

标签: android

我正在使用两个GradientDrawable之间的TransitionDrawable,我将其设置为Button的背景可绘制。这可以很好地在两个ColorDrawable之间进行转换,但是当我尝试使用GradientDrawables时,我得到了一些非常奇怪的结果。

在我的2.3.5设备上,一切都很好用。 在我的4.2.2设备上,按钮只占用第一个渐变而根本不重绘。

如果我在开始转换后添加对view.refreshDrawableState()或view.setBackgroundDrawable(drawable)的调用,它将刷新但事情变得更加怪异:

  • 某些按钮正常工作
  • 过渡期间某些按钮在点处闪烁
  • 一个按钮,无论出于何种原因,都会转换为黑色而不是第二个渐变可绘制

我正在使用递归帖子将转换循环到视图中,但我认为这不是问题,因为当我不这样做时会遇到同样的问题。

有谁知道我能做些什么来解决这个问题?这是相关的代码:

private static void highlightView(View view, Context context) {

    TransitionDrawable drawable;

    GradientDrawable d1 = new GradientDrawable(Orientation.TOP_BOTTOM,                  new int[] { HIGHLIGHT_COLOR_1, HIGHLIGHT_COLOR_G1 });
    d1.setCornerRadius(3f);

        GradientDrawable d2 = new GradientDrawable(Orientation.TOP_BOTTOM, 
            new int[] { HIGHLIGHT_COLOR_2, HIGHLIGHT_COLOR_G2 });
    d2.setCornerRadius(3f);

    drawable = new TransitionDrawable(new Drawable[] { 
            d1,
            d2
    });
    view.setBackgroundDrawable(drawable);

    drawable.setCrossFadeEnabled(true);

    animateBackground(drawable, true, view);

}

private static void animateBackground(final TransitionDrawable drawable,
        final boolean forward, final View view) {
    if (view.getBackground() != drawable) return;

    if (forward) {
        drawable.startTransition(HIGHLIGHT_CYCLE / 2);
    } else {
        drawable.reverseTransition(HIGHLIGHT_CYCLE / 2);
    }

    view.postDelayed(new Runnable() {
        @Override
        public void run() {
            animateBackground(drawable, !forward, view);
        }
    }, HIGHLIGHT_CYCLE / 2);
    view.refreshDrawableState(); //without this, no transition occurs at all
}

0 个答案:

没有答案