首页 > 代码库 > Animation与nineoldandroid项目 day02

Animation与nineoldandroid项目 day02

一.  项目问题

1. 欢迎界面显示时,使back键失效


二. 项目开发功能点:

1. 监听按键事件

    在Activity中重写onKeyDown()方法

      A8C27CECA75049C2AC85D0CEFD777170


2. 自定义主题解决Android多版本碎片化问题

    目的:在2.x中的主题是NoTitlebar,

              在4.x中的主题是NoActionbar

    Android系统的读取资源的机制:

    apk的res目录中有多个styles.xml,

    当apk运行在2.x版本中,Android系统会读取values目录中的           

    styles.xml

    当apk运行在4.x版本中,Android系统会读取values-v14

    目录中的styles.xml

          1A5630C875C5456D85A3FFF4132128C5

    步骤:

    1) 在values/styles.xml文件中新建一个主题

         1D35161B509F48699C5804ADFD4E3919

    2) 在values/styles.xml文件中新建一个父主题

         466FC885E012407F8491D346F9AE9F36

    3) 在values-v14/styles.xml文件中新建一个父主题

         2507E10A17D044EFB5E63BC582EE96B9

    4)  在清单文件中为欢迎页面Activity配置新的主题

         9A496FFCECCF461E81862C431D039D3D

           

3. 动画

    gif、flash

    原理:若干图片按照顺序和一定时间间隔(100毫秒)播放

    默认不支持gif,因为画质较差(8位图,256色)

    

    Android中支持的动画

    3.1 FrameAnimation

          功能:能够实现任意复杂动画

          实现步骤:

          1) 拷贝关键帧(Frame)

          2) 新建Android XML

                   Resource Type :Drawable

                   Root Element   :animation-list 

              5665C9C9011B49139DE5E81C02A88ED0

          3) 编辑图片先后顺序和切换时间间隔

              E18606A007D14E28AD45AE5CF473257E

             增加oneshot属性,动画只播放一次

              6F9D0A8F79CD45719ECF8AE9AEF2A740

           4) 得到动画对象AnimationDrawable,播放

              40C9C0AB362F45638F2DE16CADD4BC26


    注意:FrameAnimation图片数量有限

    实际应用场景:局部的范围内,使用少量图片实现动画

    

    3.2 TweenAnimation

    原理:通过改变View的属性

              大小、位置、角度、透明度


    3.2.1 实现透明度动画步骤:

    a) 代码方式创建动画对象

    AA909B01573A4B93AD34258C08AF2307


    b) XML方式创建动画对象

        5A2E47B781DB43168DA6BE59CA6C330A

       编辑Animation内容 

         4B933B57D82942D5A90C2FF4A06737D9

    代码中将动画xml转换为Animation对象

         E712FCCCC2DB41129D289B7301485C65

    3.2.2  缩放动画配置                     移动动画配置 

        8D521686056D4DCBA6DF714EC01F18CA  C2FC21A59B4B455AB21D55E8185F3C1C

        旋转动画配置 E928DAA57C9B46658F5747EDEB890774


一个屏幕的宽度或高度:100%p


4. 快捷的注册事件的方法

    1) 在布局中为控件添加onClick属性

          FC3D989AF91640498B7BF0490A9363FA

    2)  在Activity中添加以onClick属性值为名称的方法

          79D7725118484FCBACE77BE1D839859E

         注意:必须是public,参数必须是View v


5. 开源项目原理

   项目设置为库,可被其他项目复用


6. nineoldandroid项目用法

  

Properties动画    属性动画
Android3.x新增

问题:官方不支持2.x
使用开源项目

7. 欢迎页面
    使用的控件ViewPager
    libs/android-support-v4.jar
实现步骤:
1) 在布局中新增ViewPager控件
    android.support.v4.view.ViewPager
    技巧:在代码中输入ViewPager,联想后在import中
2) 初始化所有ViewPager页面,并用ArrayList<View>保存
3) 代码中设置适配器
    mPager.setAdapter()
4) 重写isViewFromObject()方法
    return arg0 == arg1;
5) 重写instantiateItem()方法
    View view = mList.get(position);
    mPager.addView(view);
    return view;    
6) 重写destroyItem()方法
    View view = mList.get(position);
    mPager.removeView(view);

// 改变ViewPager缓存个数,

// 参数的含义是左右各缓存几个
   mPager.setOffscreenPageLimit(3);




java.lang.UnsupportedOperationException: Required method

destroyItem was not overridden

附:常见问题

目标:能够解决所有讲解过的FC问题


1. 代码中引用R编译错误,

   原因是:导入了错误的R

       49CC45D546344D3B870C893ABFF99121


2. java.lang.RuntimeException: Unable to instantiate(实例化) activity ComponentInfo{com.example.cw_0811/com.example.w_0811.MainActivity}: java.lang.ClassNotFoundException: com.example.w_0811.MainActivity


    FC的原因:运行时异常和Error

    查看日志的方法:

    1) 拉到logcat最底部,向上找

        984F162E25194824B1410054EA412AEB

        main是线程名称,可以是其他

    2) 找异常类型名称:

        02A2630ABC3D4748AA466CD0A8F42E67

    3) ClassNotFoundException的原因是:

       代码中没有这个类,注意仔细检查包名 + 类名


3. java.lang.RuntimeException: Unable to start activity ComponentInfo{org.yuchen.test/org.yuchen.test.MainActivity}: java.lang.ClassCastException: android.widget.Button cannot be cast to android.widget.ImageView


原因:eclipse的ADT的bug

出现场景:修改布局而较少修改代码

解决:project->clean