使用AnimationDrawable单击时动画自定义CheckedTextView

时间:2014-12-01 15:30:49

标签: android animation checkedtextview animationdrawable

我想在复选框中添加一些材质外观。我想使用自定义drawables将checkmark drawable从一个状态动画到另一个状态。我试图为ImageView(看它是否有效)和CheckedTextView(这是我真正需要的)制作动画。

为了做到这一点,我在布局中创建了两个视图,并将android:onClick分别设置为自定义方法animateImage(View v)animateChecked(View v)。我的问题是,第二个不起作用,尽管两者之间的唯一区别是我如何得到并设置我需要的可绘制。

layout.xml

<ImageView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:layout_gravity="center"
    android:src="@drawable/checkbox_off" <!-- static png showing the unchecked mark -->
    android:clickable="true"
    android:onClick="animateImage"/>

<CheckedTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="@string/impo8"
    android:gravity="center_vertical|left"
    android:checked="false"
    android:clickable="true"
    android:CheckMark="@drawable/checkbox_off" <!-- again -->
    android:onClick="animateChecked" />

活性

public void animateImage(View v) {
    ImageView iv = (ImageView)v;
    iv.setBackgroundResource(R.drawable.animation_checkbox_on);
    AnimationDrawable adOn = (AnimationDrawable)iv.getBackground();
    adOn.setColorFilter(getResources().getColor(R.color.static), PorterDuff.Mode.SRC_IN);
    adOn.start();
}
public void animateChecked(View v) {
    CheckedTextView c = (CheckedTextView)v;
    c.setCheckMarkDrawable(R.drawable.animation_checkbox_on);
    AnimationDrawable ad = (AnimationDrawable) c.getCheckMarkDrawable();
    ad.setColorFilter(getResources().getColor(R.color.static), PorterDuff.Mode.SRC_IN);
    ad.start();
}

当然,在两种方法中使用的 animation_checkbox_on 是具有静态png和持续时间的动画列表xml资源。我希望尽可能简单(甚至没有实现“if checked”语句)。

如上所述:第一种方法有效,ImageView正确动画;第二种方法不起作用,复选标记保持不变。我的代码中是否存在某种概念错误,或者我在某处错了?如何在CheckedTextView标记上进行此操作? 我没有收到Android Studio的任何警告。谢谢。

/抽拉/ animation_checkbox_on

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item
    android:drawable="@drawable/checkbox_off2" android:duration="50" />
<item
    android:drawable="@drawable/checkbox_off3" android:duration="50" />
<item
    android:drawable="@drawable/checkbox_on" android:duration="50" />

修改 我注意到动画列表中的第一项实际加载了。此外,如果我删除行ad.start()(!)。

,结果也是一样的

看起来setCheckMarkDrawablegetCheckMarkDrawable只返回动画列表的第一项,因此无效ad.start(),并将动画转换为简单的可绘制开关。 如果这是真的,问题将是如何动画CheckedTextView。我已经读过关于在应用下一个drawable之前手动暂停线程一段时间了,但这对我来说似乎不是最好的选择。

0 个答案:

没有答案