我正在开发一个Android应用程序我想在单个圆形区域中显示字母表,我还需要圆形区域为白色,字母表为primaryColor
我的应用程序,
这是我的textView
:
<TextView
android:id="@+id/first"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="A"
android:background="@drawable/circle" />
这是circle.xml
文件夹中drawable
的代码:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<stroke android:width="1dp" android:color="@color/colorPrimaryDark" />
<gradient android:startColor="@color/white" android :endColor="@color/white"
android:angle="270"
/>
</shape>
这是filled_circle
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
<stroke android:width="1dp" android:color="@color/colorPrimaryLight" />
<gradient android:startColor="@color/colorPrimaryLight"
android:endColor="@color/colorPrimaryLight"
android:angle="270"
/>
</shape>
和java
文件中的代码:
@Override
public void onClick(View v) {
}
问题
当单击每个字母表的textarea时,白色应该淡出,primaryColor
应该淡入,并带有动画。
有人可以帮忙,在android 4及以上版本的animation
库的帮助下完成这项工作吗?
我目前正在尝试用其他资源替换textview
的背景并将动画应用到它,但我完全接受任何新建议和执行此操作的新方法,
我还提供了上面的当前代码,但如果我必须进行基本的更改或修改以使其与animation
库一起使用,请告诉我?
答案 0 :(得分:1)
我建议您执行以下操作:
不要试图在单个背景中绘制所有内容的动画。你需要:
<FrameLayout>
<View/> //Just a view with your white circular background
<View/> //Another view with circular background, but this one is gonna display the color
<TextView/> //Centered, your alphabet letter
</FrameLayout>
所以你想把所有这些放在自定义视图中。白色圆形背景视图将留在它。您可以使用第二个圆形视图来设置字母表的字母颜色。有很多简单的方法可以从自定义可绘制列表层中的图层更改颜色(例如Programmatically change color of shape in layer list)。
首次展开自定义视图时,您希望将彩色圆形视图的可见性设置为不可见。白色圆形视图将保持可见。 TextView始终位于顶部。
重写onClick方法,使您的自定义视图实现View.OnClickListener,您应该放置代码来运行动画。您需要做的唯一事情是对彩色圆圈视图进行alpha动画,并且在onAnimationEnd()
挂钩中,您应该将视图的可见性设置为可见。您将需要在自定义视图中使用布尔变量来跟踪是否显示彩色圆圈。这样,如果正在显示彩色圆圈视图并且用户点击它,您可以执行反向动画以仅显示白色圆圈视图。
请记住在自定义视图中执行所有操作以保持其良好和干净。还要记得添加一些自定义属性,这样就可以从xml中设置彩色圆圈视图的颜色。
我希望这能让你了解如何实现它,IDK真的有时间作为例子,但是如果你被某个地方卡住或者你没有得到我说的话,请告诉我。< / p>