我可以预加载动画Drawable吗?

时间:2015-11-06 10:55:28

标签: android android-animation preload animationdrawable

我正在使用Android的动画Drawable来显示动画。但是我希望它尽可能地活泼,因为我想让它在触摸屏幕时显示。它现在的方式太慢了。显示大约需要500毫秒。有没有办法可以预装动画或者其他替代方案?

以下是代码:

public void setYes(){
    ImageView prev_view = (ImageView) ref_container.getChildAt(ref_container.getChildCount()-2);
    prev_view.setImageResource(R.drawable.accept);
    acceptAnimation = (AnimationDrawable) prev_view.getDrawable();
    acceptAnimation.start();
}

这里是包含动画帧的drawable文件夹中的XML:

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/accept01" android:duration="33" />
<item android:drawable="@drawable/accept02" android:duration="33" />
<item android:drawable="@drawable/accept03" android:duration="33" />
<item android:drawable="@drawable/accept04" android:duration="33" />
<item android:drawable="@drawable/accept05" android:duration="33" />
<item android:drawable="@drawable/accept06" android:duration="33" />
<item android:drawable="@drawable/accept07" android:duration="33" />
<item android:drawable="@drawable/accept08" android:duration="33" />
<item android:drawable="@drawable/accept09" android:duration="33" />
<item android:drawable="@drawable/accept10" android:duration="33" />
<item android:drawable="@drawable/accept11" android:duration="33" />
<item android:drawable="@drawable/accept12" android:duration="33" />
<item android:drawable="@drawable/accept13" android:duration="33" />
<item android:drawable="@drawable/accept14" android:duration="33" />
<item android:drawable="@drawable/accept15" android:duration="33" />
<item android:drawable="@drawable/accept16" android:duration="33" />
</animation-list>

当我检测到某种触摸模式时,我会调用此函数。我想我之前无法加载它,因为我在不同的视图ref_container.getChildCount()-2中使用它。你们有什么解决方案,建议加快速度吗?

1 个答案:

答案 0 :(得分:0)

是的,第一次显示动画时会有延迟。解决方案是在onCreate()内分配图像,以避免延迟。

这是代码

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.animated_view) AppCompatImageView animatedView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.your_activity);
        ButterKnife.bind(this);

        // assign animation
        animatedView.setBackgroundResource(R.drawable.your_xml_list_of_images);
    }

    @OnClick(R.id.yolo)
    public void onClickYolo() {
        animatedView.setVisibility(View.VISIBLE);
        ((AnimationDrawable) animatedView.getBackground()).start();
    }

}