Android自定义view教程01-------------Android的Frame动画详解

本系列博文 最终的目的是能教会大家自己实现比较复杂的android 自定义控件。所以知识点不仅仅局促在自定义view本身上面。实际上现在github上一些做的比较出色的自定义控件 大部分都是由三个部分组成

第一:动画 第二:自定义view 第三:触摸滑动控制。所以我们这个系列也是由动画作为开篇。最终会带着大家分析几个github上比较出色的自定义控件。

 

Android 的frame动画是比较简单基础的内容,在以往的2.x 3.x版本很多人都会去使用这个 来作为loading 图的实现方法。但是最近实际上在做loading图效果的时候很多人已经不去使用frame了。

原因是有更简单的方法----直接播放一个gif图片更好。更方便。但是在以往10-12年这个时间段 android的机器硬件还比较一般的时候 还是避免这么做的,因为直接播放gif 图片比较消耗cpu和内存。

而用frame动画来做 效果会更好一些。废话不多说,简单介绍两种方法来实现frame动画。

 

首先在res下面新建一个文件夹 anim,然后在这个文件夹里面新建一个动画文件(这个文件不要放在drawable下面,有些android 版本会在这里报错 一定要放在anim下)。例如

<?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/aaa"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/bbb"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/ccc"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/ddd"
        android:duration="1000"/>
    <item
        android:drawable="@drawable/eee"
        android:duration="1000"/>

</animation-list>

  

这就是我们要播放的动画内容  android:oneshot 这个属性是指是不是播放一次就结束 true 就是一次就结束 false就是一直播放下去  android:duration="1000" 是指每隔一千毫秒就换下一张图片。

 

然后在mainActivity的 xml里面引用这个文件即可

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ImageView
 8         android:id="@+id/im"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:background="@anim/dance" />
12 
13 </LinearLayout>

 

之后即可看到效果,当然有的人想做的炫酷一点,比如说资源文件是从网上拉取的, 要做成动态加载动画,那么也是可以的,通过代码来控制即可

 

 1 package com.example.frametest;
 2 
 3 import android.app.Activity;
 4 import android.graphics.drawable.AnimationDrawable;
 5 import android.graphics.drawable.Drawable;
 6 import android.os.Bundle;
 7 import android.widget.ImageView;
 8 
 9 public class MainActivity extends Activity {
10 
11     private ImageView iv;
12 
13     private AnimationDrawable animDr = new AnimationDrawable();
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         this.iv = (ImageView) this.findViewById(R.id.im);
20         // 这边图省事就直接加载drawable文件夹下面的图片 如果有需要你们可以直接加载sd卡下的图片
21         Drawable drawable = getResources().getDrawable(R.drawable.aaa);
22         animDr.addFrame(drawable, 1000);
23         Drawable drawable2 = getResources().getDrawable(R.drawable.bbb);
24         animDr.addFrame(drawable2, 1000);
25         Drawable drawable3 = getResources().getDrawable(R.drawable.ccc);
26         animDr.addFrame(drawable3, 1000);
27         Drawable drawable4 = getResources().getDrawable(R.drawable.ddd);
28         animDr.addFrame(drawable4, 1000);
29 
30         animDr.setOneShot(false);
31         iv.setBackgroundDrawable(animDr);
32         animDr.start();
33 
34     }
35 }

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。