一.  项目问题

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


二. 项目开发功能点:

1. 监听按键事件

    在Activity中重写onKeyDown()方法

      Animation与nineoldandroid项目 day02_主题


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

          Animation与nineoldandroid项目 day02_项目开发_02

    步骤:

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

         Animation与nineoldandroid项目 day02_Android_03

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

         Animation与nineoldandroid项目 day02_项目开发_04

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

         Animation与nineoldandroid项目 day02_Android_05

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

         Animation与nineoldandroid项目 day02_项目开发_06

           

3. 动画

    gif、flash

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

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

    

    Android中支持的动画

    3.1 FrameAnimation

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

          实现步骤:

          1) 拷贝关键帧(Frame)

          2) 新建Android XML

                   Resource Type :Drawable

                   Root Element   :animation-list 

              Animation与nineoldandroid项目 day02_项目开发_07

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

              Animation与nineoldandroid项目 day02_项目开发_08

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

              Animation与nineoldandroid项目 day02_项目开发_09

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

              Animation与nineoldandroid项目 day02_Android_10


    注意:FrameAnimation图片数量有限

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

    

    3.2 TweenAnimation

    原理:通过改变View的属性

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


    3.2.1 实现透明度动画步骤:

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

    Animation与nineoldandroid项目 day02_主题_11


    b) XML方式创建动画对象

        Animation与nineoldandroid项目 day02_主题_12

       编辑Animation内容 

         Animation与nineoldandroid项目 day02_Android_13

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

         Animation与nineoldandroid项目 day02_项目开发_14

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

        Animation与nineoldandroid项目 day02_Android_15  Animation与nineoldandroid项目 day02_主题_16

        旋转动画配置 Animation与nineoldandroid项目 day02_Android_17


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


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

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

          Animation与nineoldandroid项目 day02_项目开发_18

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

          Animation与nineoldandroid项目 day02_主题_19

         注意:必须是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

       Animation与nineoldandroid项目 day02_项目开发_20


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最底部,向上找

        Animation与nineoldandroid项目 day02_项目开发_21

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

    2) 找异常类型名称:

        Animation与nineoldandroid项目 day02_Android_22

    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