0

我正在实现一个简单的翻转时钟/计数器/自动收报机小部件,它将由以下“数字”小部件的几个实例组成:

在此处输入图像描述

它是放置在背景图像顶部的数字。该数字应该通过向上滑动并显示下一个数字来每秒进行动画处理。在动画期间,两个数字都应保持在背景边界“内”。

我试图通过TextView使用 2 行来实现这种行为 - 每行一个数字 - 并将 thisTextView的位置向上设置动画,直到下一个数字完全可见。然后我会重置TextViews 的位置,同时替换两个数字,这样就不可能注意到了。然后我会重复这个过程,让它看起来像动画永远不会结束。

在这里,您可以看到动画的中间状态,此时可以看到部分 0 和部分 9。layout_marginTop通过将属性设置为负值,我在 Eclipse 的图形布局编辑器中“模拟”了它。

在此处输入图像描述

这是布局文件(提到的属性通常不存在)。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="20dp"
    android:layout_height="38dp"
    android:background="@drawable/background_countdown_normal_grey"
    android:clipChildren="false" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:clipChildren="false"
        android:paddingBottom="5dp"
        android:paddingTop="5dp" >

        <TextView
            android:id="@+id/textview_countdown_digit"
            style="@style/TextView.CountdownDigit"
            android:layout_marginTop="-12dp"
            android:text="0\n9" />
    </LinearLayout>

</LinearLayout>

我尝试了两种解决方案。通过使用ViewPropertyAnimatorontranslateYy,我得到了一个流畅的动画,但是在动画过程中原始剪辑TextView不会改变,所以实际上第二个数字永远不可见。如您所见,我尝试clipChildren了属性,但它似乎没有改变任何东西。

我的第二种方法是使用ValueAnimator自定义,Evaluator它修改topMarginLayoutParams. TextView它可以工作,但即使在高端设备上,动画也很不稳定。

所以我的问题是,如何避免动画期间的视图剪辑并以有效的方式进行剪辑?有更好的方法吗?

4

1 回答 1

0

我找到了一个替代解决方案,我使用 ScrollView 代替。我的布局如下所示:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollview_countdown_digit"
    android:layout_width="20dp"
    android:layout_height="38dp"
    android:background="@drawable/background_countdown_normal_grey"
    android:paddingBottom="5dp"
    android:paddingTop="5dp"
    android:scrollbars="none" >

    <TextView
        android:id="@+id/textview_countdown_digit1"
        style="@style/TextView.CountdownDigit"
        android:text="0\n9" />

</ScrollView>

ObjectAnimator我按scrollY属性设置动画。到目前为止运作良好。

我也尝试过 2 个TextViewsintsead(在我的初始布局中),但它并没有改变剪辑的事实。

于 2013-08-07T15:51:23.607 回答