简单来讲,逐帧动画就是将一幅一幅图连起来播放,指定每一帧的持续时间,一般动画图片不要太大,否则会发生内存溢出异常。
主要要点:
1、定义动画资源,范例如下:
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/ball1" android:duration="50" />
<item android:drawable="@drawable/ball2" android:duration="50" />
<item android:drawable="@drawable/ball3" android:duration="50" />
<item android:drawable="@drawable/ball4" android:duration="50" />
<item android:drawable="@drawable/ball5" android:duration="50" />
<item android:drawable="@drawable/ball6" android:duration="50" />
<item android:drawable="@drawable/ball7" android:duration="50" />
<item android:drawable="@drawable/ball8" android:duration="50" />
<item android:drawable="@drawable/ball9" android:duration="50" />
</animation-list>
2、获得动画元素,范例代码如下:
ImageView imgView = (ImageView) findViewById(R.id.imageView);
3、关联动画元素和动画资源,范例代码如下:
imgView.setBackgroundResource(R.drawable.frame_animation);
AnimationDrawable frameAnimation = (AnimationDrawable) imgView.getBackground();
4、启动动画、关闭动画,范例代码如下:
if (frameAnimation.isRunning()) {
frameAnimation.stop();
} else {
frameAnimation.start();
}
5、默认情况下,动画是循环播放的,如果只播放一次可通过下面的代码实现:
frameAnimation.setOneShot(true);
6、在每播放一遍后插入内容:
frameAnimation.addFrame(getResources().getDrawable(R.drawable.ic_launcher), 80);
针对Layout或者ViewGroup对象,可以方便的通过xml中的layoutAnimation属性定义动画效果,通过persistentDrawingCache定义动画的影响范围,来提高性能。
定义动画:
<set xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:anim/accelerate_interpolator" > <scale android:duration="500" android:fromXScale="1" android:fromYScale="0.1" android:pivotX="50%" android:pivotY="50%" android:startOffset="100" android:toXScale="1" android:toYScale="1.0" /> </set>
定义动画布局:
android:animation="@anim/scale"
android:animationOrder="reverse"
android:delay="30%" />
使用动画:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <ListView android:id="@+id/list_view_id" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layoutAnimation="@anim/list_layout_controller" android:persistentDrawingCache="animation|scrolling" /> </LinearLayout>
一直使用Struts,由于在换工作的过程中,发现对Spring要求越来越多,所以开始学习这个甚为流行的框架。。
文章全文为转载“Irving_wei”的文章,觉得跟刚入学SPRING的我还是蛮合适的。。所以全文转载,多谢!
另,我也特别喜欢Irving_wei兄博客中的那句“现在我来了,你们看到的也将因此改变”,一并粘上,与大家分享。
http://irving-wei.iteye.com/blog/344071
http://irving-wei.iteye.com/blog/344792
以下为全文:
天第一次接触Spring,对IoC的感觉就是:把所有的类之间的联系全部放到XML里面进行管理,从而减小类和类之间的关系,用类和配置文件(xml)之间的联系来取代类和类之间的联系。当要用到关联类的实例的时候,就只要实例化一个XmlBeanFactory对象,获取到相应关联类的bean实例,调用实例实现类的具体方法,最后释放XmlBeanFactory对象。
所谓依赖注入中“注入”的理解,就是把有关联的类的“ID”(自定,唯一),和它的路径配置到Xml里面。
Spring的依赖注入,也称作是“反转控制”。
当一个类A需要用到另一个类B的对象的时候,通常情况下,就是在A中实例化一个B类的对象,然后通过对象来调用B类中的非私有变量和方法。这是不符合工厂设计模式的要求的,并且这样的设计方式存在很多的缺陷:
其一,A类去主动调用B类的构造方法,这就使得A类和B类之间的关系非常紧密,在Java程序设计的过程中,这种两个类之间关系非常紧密的情况是非常忌讳发生的,因为结合紧密的两个类在程序设计过程中会很难进行调试,尤其是在大的程序中,如果一连串的类之间发生调用关系,那么如果其中某一个类发生了改变,或者说某一个或者几个类发生了错误,需要调试,那么,所有调用到这几个类的类都要进行相应的修改,这是很麻烦的事情。
其二,A类调用B类的方法,这就说明,A类必须知道B类方法的实现方式,这样使得AB之间的耦合度相当高,这也是不利于Java程序设计的。整个java程序设计的发展历史,就是一个怎样在类与类之间解耦的过程,让有关联的类处于一个松耦合的状态,这是java编程所追求的一个目标。
Spring框架是工厂设计模式的一个非常好的体现,也同样特别注意了“解耦”,同样,它也是用接口的方式将程序解耦发挥到一个新的境界的框架。
同样引用上面的例子,类A需要用类B的方法,在Spring框架中,不再是由A去主动调用B的构造方法,而是由Spring容器来完成,Spring容器只需要知道A需要得到哪个Bean的实例,就会帮A去创建一个B的实例,并不需要A自己去调用B的构造方法,Spring怎么知道A需要哪个Bean的实例?这就要涉及到Spring的IoC容器,它是一个“工厂”,可以对每个Bean以配置文件的形式进行管理,而A需要B对象的时候,就只要创建一个工厂实例,然后通过工厂实例来获得一个B的bean实例,这样就可以去使用类B的非私有成员了。
从整体上看,所有的类并没有和于它关联的类有任何的直接联系,所有的类都通过配置文件的形式,“挂”到Spring容器里去了,由Spring容器统一管理。调用者直接等待容器把被调用者的实例“注入”进来,然后使用。由此可以想象,Spring容器的功能应该有多强大。