本系列博文 最终的目的是能教会大家自己实现比较复杂的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 }
时间: 2024-10-08 06:49:04