我有一个LinearLayout
TextView
的可见性和背景(GradientDrawable
)根据函数myFunction()
而变化:
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:layout_weight="1"
android:animateLayoutChanges="true"
android:gravity="center"
android:orientation="vertical" >
(...Some views...)
<TextView
android:id="@+id/currentPercentage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:gravity="center"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:singleLine="true"
android:text="XX.X%"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="@color/White" />
</LinearLayout>
currentPercentage
TextView
默认情况下具有GONE
可见性,并且根据包含它的片段中的某些事件,可能会将其更改为可见(或返回{{1} })及其背景为不同的GONE
,如此:
GradientDrawable
这很好,因为myFunction(...){
TextView currentPercentage= (TextView) getView().findViewById(R.id.currentPercentage);
if(condition ... ) {
Color color = // Color based on the condition...
GradientDrawable gd = new GradientDrawable(
GradientDrawable.Orientation.TL_BR,
new int[] {color,color});
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
int dp = Math.round(10f / (displayMetrics.xdpi / DisplayMetrics.DENSITY_DEFAULT));
gd.setCornerRadius(dp);
currentChartPercentage.setBackground(gd);
} else if( otherCondition...)
{
// ... similar stuff ...
} else {
// Hide the currentPercentage TextView
currentPercentage.setVisibility(View.GONE);
}
}
的背景和可见性在调用TextView
时会顺利变化,而myFunction()
中的其他元素会移动(带动画)以腾出空间对于LinearLayout
。
我的问题是,只要可见性从GONE变为VISIBLE,View就会很好地消失(正如TextView
所预期的那样),但最终会出现一个恼人的黑色背景{{1}圆角是(见图)。
在此之后,如果我触摸其他内容或拖动片段(它在android:animateLayoutChanges="true"
内),黑色背景就会消失。如果再次调用GradientDrawable
,视图已经可见,则背景颜色会根据需要更改,不会出现黑色背景。
另外,如果我禁用动画,我也不会获得黑色背景。因此,问题似乎与通过动画从GONE到VISIBLE的可见性有关。
此行为是在使用Android 4.3的模拟器上获得的,我还没有在我的真实设备上测试过它。
有没有人知道为什么会发生这种情况?
修改
刚刚在带有ICS的真实设备上进行测试,没有任何问题。
编辑2:
我曾经遇到过类似于Background ListView becomes black when scrolling的ListView中出现不良背景的问题,但在这种情况下,设置ViewPager
不会做任何事情。