写一篇文章很辛苦啊!!!
转载请注明,联系请邮件nlp30508@qq.com
我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的个AnimationTest 源码 百度搜就知道很多下载的地方 网上源码的名字叫:序列帧动画,开始,结束监听的解决.zip
监听事件非常的常见 也经常用 我们一般都是利用系统里面的方法去实现
监听事件可以是触摸(一般是按下,拖动,松开) 可以是点击(点击事件是指你设置了一个按钮或者图片等)
但是当你自己去定义一个View的时候,这个时候接口就需要你自己去定义了
系统自定义定义的widget都是有相应的监听事件的处理,但是你自己定义了一个widget 就需要去自己写出来了,
这节将的就是当我们继承View实现了动画的展示,但是我们需要去监听这个动画并有操作该怎么办?该怎么去写这样的函数
其实它的原理跟前面的文章:26个字母的列表实现是一样的 点击我查看
根据前面的例子我们知道一般步骤是这样的:
1.自己定义一个类 让它继承Android.view.View
2.重载这个类的构造函数,然后处理OnDraw()函数
3.如果我们想要自己定义的视图能够被监听,是需要再类中添加监听接口(定义方法不实现)
4.如果想要这个自定义的视图实现监听,在activity中,那么首先需要把它 放在 布局文件中,也就是你需要在layout中有定义
做法一般是这样的:
看到没有 我们只关心 这句话: com.wust.citylist.activity.MyLetterListView
这样做就把我们自己定义的视图当做一个控件显示在布局上了,这个时候我们就可以去处理它的监听事件了
5.接下来就在实现这个布局文件的activity类中去实现这个接口中的函数就可以了 也就是重载
上面的步骤应该说的够清楚了,接下来我们就来看看 帧动画事件的监听处理
一. 定义自己的视图
import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.os.Handler; import android.util.AttributeSet; import android.widget.ImageView; public class AnimationImageView extends ImageView { public AnimationImageView(Context context) { super(context); // TODO Auto-generated constructor stub } public AnimationImageView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub } public AnimationImageView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public interface OnFrameAnimationListener{ /** * 动画开始播放后调用 */ void onStart(); /** * 动画结束播放后调用 */ void onEnd(); } /** * 不带动画监听的播放 * @param resId */ public void loadAnimation(int resId){ setImageResource(resId); AnimationDrawable anim = (AnimationDrawable)getDrawable(); anim.start(); } /** * 带动画监听的播放 * @param resId * @param listener */ public void loadAnimation(int resId, final OnFrameAnimationListener listener) { setImageResource(resId); AnimationDrawable anim = (AnimationDrawable)getDrawable(); anim.start(); if(listener != null){ // 调用回调函数onStart listener.onStart(); } // 计算动态图片所花费的事件 int duratiOnTime= 0; for (int i = 0; i
code说明:1.第一个这个类是继承ImageView ,上篇文章我们是直接继承View的
android:id="selected" android:oneshot="false"> - android:drawable="@drawable/wheel0" android:duration="50" />
- android:drawable="@drawable/wheel1" android:duration="50" />
- android:drawable="@drawable/wheel2" android:duration="50" />
- android:drawable="@drawable/wheel3" android:duration="50" />
- android:drawable="@drawable/wheel4" android:duration="50" />
- android:drawable="@drawable/wheel5" android:duration="50" />
Here is the code to load and play this animation.
// Load the ImageView that will host the animation and // set its background to our AnimationDrawable XML resource. ImageView img = (ImageView)findViewById(R.id.spinning_wheel_image); img.setBackgroundResource(R.drawable.spin_animation); // Get the background, which has been compiled to an AnimationDrawable object. AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground(); // Start the animation (looped playback by default). frameAnimation.start()注意到:
// Get the background, which has been compiled to an AnimationDrawable object. AnimationDrawable frameAnimation = (AnimationDrawable) img.getBackground();
Drawable | getDrawable()
Return the view's drawable, or null if no drawable has been assigned.
|
Drawable | getBackground()
Gets the background drawable
|
java.lang.Object | |||
↳ | android.graphics.drawable.Drawable | ||
↳ | android.graphics.drawable.DrawableContainer | ||
↳ | android.graphics.drawable.AnimationDrawable |
XML Attributes | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Attribute Name | Related Method | Description | |||||||||
android:drawable | Reference to a drawable resource to use for the frame. | ||||||||||
android:duration | Amount of time (in milliseconds) to display this frame. | ||||||||||
android:oneshot | If true, the animation will only run a single time and then stop. | ||||||||||
android:variablePadding | If true, allows the drawable's padding to change based on the current state that is selected. | ||||||||||
android:visible | Provides initial visibility state of the drawable; the default value is false. |