TransitionDrawable作为TextView中的背景无法按预期工作

时间:2012-05-21 16:29:56

标签: android android-layout android-xml

关注问题:Animate change of view background color on Android我试图通过TransitionDrawable资源使TextView在两个背景之间淡入淡出。我的转换xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/gray_bar" />
    <item android:drawable="@drawable/green_bar" />
</transition>

我尝试通过以下方式将其设置为运行时的背景:

TextView answerBox = (TextView) findViewById(R.id.answerBox);
answerBox.setBackgroundResource(R.drawable.correct_transition);
TransitionDrawable transition = (TransitionDrawable) answerBox.getBackground();
transition.startTransition(1500);

结果是textview转换成:

Textview with gray_bar background 对此: Textview with green_bar background

当整个灰色条应转换为绿色条时。

两者都是9补丁png图像。这些是原件:

gray_bar green_bar

我的猜测是绿色条填满了灰色条内的文字空间,但我不知道为什么。有线索吗?尽管出现了所包含的图像,灰色的也看起来比它应该大得多,但是在转换之前,期间或之后不会改变大小。这可能是9补丁图像的一个问题,因为我已经测试了正常图像并且过渡效果很好。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我能够重现你看到的问题,绿色条不会占据灰色的整个空间。要修复它,请使用灰色条9补丁并将底部和右侧的线条延伸到远离角落的一个像素。

另一方面,你的9补丁的另一个潜在问题是,随着内容的高度增加,你的图像会在垂直拉伸时产生视觉效果。这是图像左侧黑条高度的结果,它决定了9个贴片的哪个部分应该伸展。对这些9个贴片的进一步改进是将左边的黑线减少到左边缘的正中心的单个像素。由于只有一个像素被标记为可伸缩的,如果你的可绘制高度增加,这应该给你一个漂亮的清晰垂直边缘。

如果您包含布局代码,我可以帮助您解决其他尺寸问题。