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 }
				
时间: 2024-10-08 06:49:04

Android自定义view教程01-------------Android的Frame动画详解的相关文章

Android基础入门教程——2.5.3 AlertDialog(对话框)详解

Android基础入门教程--2.5.3 AlertDialog(对话框)详解 标签(空格分隔): Android基础入门教程 本节引言: 本节继续给大家带来是显示提示信息的第三个控件AlertDialog(对话框),同时它也是其他 Dialog的的父类!比如ProgressDialog,TimePickerDialog等,而AlertDialog的父类是:Dialog! 另外,不像前面学习的Toast和Notification,AlertDialog并不能直接new出来,如果你打开 Alert

Android基础入门教程——2.3.2 EditText(输入框)详解

Android基础入门教程--2.3.2 EditText(输入框)详解 标签(空格分隔): Android基础入门教程 本节引言: 上一节中我们学习了第一个 UI控件TextView(文本框),文中给出了很多实际开发中可能遇到的一些需求 的解决方法,应该会为你的开发带来便利,在本节中,我们来学习第二个很常用的控件EditText(输入框): 和TextView非常类似,最大的区别是:EditText可以接受用户输入!和前面一样,我们不一个个讲属性, 只讲实际应用,要扣属性可以自己查看API文档

Android基础入门教程——8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash

Android基础入门教程--8.3.18 Canvas API详解(Part 3)Matrix和drawBitmapMash 标签(空格分隔): Android基础入门教程 本节引言: 在Canvas的API文档中,我们看到这样一个方法:drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint) 这个Matrix可是有大文章的,前面我们在学Paint的API中的ColorFilter中曾讲过ColorMatrix 颜色矩阵,一个4 * 5 的矩阵

Android基础入门教程——8.3.16 Canvas API详解(Part 1)

Android基础入门教程--8.3.16 Canvas API详解(Part 1) 标签(空格分隔): Android基础入门教程 本节引言: 前面我们花了13小节详细地讲解了Android中Paint类大部分常用的API,本节开始我们来讲解 Canvas(画板)的一些常用API,我们在Android基础入门教程--8.3.1 三个绘图工具类详解 中已经列出了我们可供调用的一些方法,我们分下类: drawXxx方法族:以一定的坐标值在当前画图区域画图,另外图层会叠加, 即后面绘画的图层会覆盖前

Android自定义view教程05--自定义view的基础知识之LayoutInflater详解

前面的教程我们讲了一下android的动画 的使用,尤其是着重讲解了属性动画的使用.那么这章开始我们将会讲一下android 自定义view的一些基础知识.帮助大家理解. 首先我们来关注一下LayoutInflater这个类,经常使用开源控件的人对这个类应该很熟悉了,但是很少有人能把这个类讲明白 用清楚,今天我们就来深挖一下这个类. 首先我们定义一个button.xml 和button2.xml 1 <?xml version="1.0" encoding="utf-8

Android自定义view教程06--Activity的绘制流程简单分析(基于android 4.0源码进行分析)

要明白这个流程,我们还得从第一部开始,大家都知道 在activity里面 setcontentview 调用结束以后 就可以看到程序加载好我们的布局文件了,从而让我们在手机上看到这个画面. 那么我们来看一下这个源码是如何实现的. 1 /** 2 * Set the activity content from a layout resource. The resource will be 3 * inflated, adding all top-level views to the activit

Android自定义view教程04-------------自定义属性动画

不太会美工,所以随便写了个菜单打开关闭的动画,主要是教会大家如何使用属性动画,可以这么说 学会属性动画 前面的fream动画和tween动画可以不用看了,因为他们2能做的,属性动画也能做, 他们2不能做的,属性动画也能做. 直接上代码吧,注释写的还算详细. 主activity代码 实际上没啥好看的,主要就是使用了dialogfragment,没有用dialog,因为谷歌后来推荐 我们使用这个dialogfragment,而且这个确实比dialog要优秀方便很多. package com.exam

Android自定义view教程03---Android 属性动画 详解

1 package com.example.donghuatest; 2 3 import android.animation.ObjectAnimator; 4 import android.animation.PropertyValuesHolder; 5 import android.animation.ValueAnimator; 6 import android.animation.ValueAnimator.AnimatorUpdateListener; 7 import andro

android之frame动画详解

上一篇我们说了android中的tween动画,这一篇我们说说frame动画,frame动画主要是实现了一种类似于gif动画的效果,就是多张图按预先设定好的时间依次连续显示. 新建一个android项目,名字叫做frameTest,在res文件夹下新建一个文件夹叫做anim,我们的frame动画的xml文件就放在这里. 在anim中新建一个frame.xml文件,内容如下: <?xml version="1.0" encoding="utf-8"?> &