智慧北京01_splash界面_新手引导界面_slidingMenu框架_.主界面结构

智慧北京重点是练习ui框架的搭建

1,闪屏页(splash)开发:

观察可知,这个闪屏界面有

旋转动画

缩放动画

透明度渐变动画

参考结果

 

注意:是没有标题和状态栏的

桌面图标和名称的修改

清单文件中配置application节点下的icon和label

动画实现:拿到根布局做动画即可

旋转动画:0-360,基于自身,保持动画结束状态

缩放动画:从0-1

Alpha动画:0-1 //比别的动画多执行1秒,效果更好

//运行的时候,动画集合

AnimationSet as = new XXXX(插补器(抖动效果,是否共享加速度)true);

2,闪屏页跳转页面

2.0 动画结束监听器,结束之后才跳转页面

通过sp获取状态,是否进入新手引导页

额外:封装sp,创建包utils,创建类PreUtils(参考类名)

这个工具类,可以获取boolean类型的值,也可以设置boolean类型的值(内部封装sp对象)

String,int,double,都可以封装

2.1新手引导页(第一次进来),参考样式

主页面(不是第一次进入)

3,新手引导页面的开发与填充,参考ui

 

这里的新手引导界面是一个ViewPager

先做最复杂的,最后一个ViewPager上面有一个Button(其实一直存在,不过到最后一个View上面才显示),另外下面三个小圆点就是一个悬浮在ViewPager上的LinearLayout

Button的ID通用做法是用btn_xxx表示

①PagerAdapter的方法

getCount()//返回ViewPager显示的总条目

isViewFromObject(view,object) //判断当前返回的object是不是一个View对象view==object

instantiateItem()//初始化一个item对象

destoryItem()//销毁一个item对象,container.remove((view)object)//这里的 super可删掉

②初始化数据

创建一个新手引导图片的数组,遍历它创建ImageView

然后添加到一个集合中mImageViewList

getCount()就可以返回这个集合的长度

instantiateItem()中获取到对应索引的ImageView,返回这个ImageView中即可

③三个小灰点

在初始化ImageViewe数组的时候,也初始化小圆点

创建ImageView,创建XML文件(做一个小圆点shape=oval属性)

指定宽高size(这里也可以不指定,通过params属性指定也可以)

从第二个小圆点开始设置左边距

这里的布局参数一般用父控件的参数LinearLayout.LayoutParams params =new XXX(包裹内容,-2)

param.leftMargin = xxx;//设置左边距

④红色的小圆点,随着引导界面的移动而移动到下一个点

创建一个XML文件,定义一个小红点(大小跟小灰点一致)

因为这个小红点需要压在小灰点上面(在小灰点的LinearLayout上面包裹一个RelativeLayout)

默认压在第一个小灰点上面

3.2 页面指示器小红点的移动

当用户手指滑动的时候,希望小红点跟随手指的移动进行移动(移动距离与ViewPager有关)

参数混乱,未绑定源码(eclipse在javaBuildPath中,删掉Libraries下对应的包(因为在Dependencies中不让绑定源码,然后再手动的addJar,Order and Export页面下勾选上,不勾选也没事,但有时候会报错))

mViewPager.setOnPageChangeListener(new onPageChangeListener){

onPageSelected()//当一个页面被选中的时候调用

onPageScrolled(){//页面滑动过程中调用

参数:position 当前位置

positionOffset 移动偏移百分比!(可以直接拿来做动画的进度)

更新小红点的距离:

 小红点移动距离 =( 小红点的左边距到下一个小灰点的左边距差值 )X偏移百分比

计算两个圆点的距离

通过小圆点的父容器getChildAt(0)(1)获取left的值,相减得到小红点移动的距离

但是直接获取到的是0,因为这时候页面可能没有绘制完

Measure>>layout>>ondraw(这三个方法只有当activity的onCreate()方法执行完了才调用)

解决方法:监听layout方法结束的事件,位置确定好了之后再调用获取圆点间距

小红点.getViewTreeObserver()//获取视图树观察者  

.addOnGloballLayoutListener()//全局的Layout监听器,

重写的方法里,是layout方法执行结束的回调

在这里获取距离就行

这个方法有可能会执行多次

获取完后getViewTreeObserver().removeGloXXX(this)//自己移除自己

这个方法已经被移除(api16,因为命名不规范)

Sdk>>Tools>>hierarchyviewer.bat//可以看到视图树

打开之后,选中包名,点击load Vie Hierarchy可以看到视图树

视图树上面的红绿点代表三个方法(measure,layout,ondraw方法)时候顺畅(执行速度)

}

onPageScrolledStateChange()//页面状态发生改变时调用

});

拿到距离之后就让距离*百分比,得到小红点需要移动的距离

拿到小红点的布局参数(父容器.layoutParams)

params.leftMargin = 移动的距离 + posintion * 间距

3.4 开始体验按钮逻辑

在前两个页面把按钮隐藏起来,最后一个页面再显示,通过ViewPager的回调进行动态的判断

按钮也要有状态选择器

按钮文字也要有状态选择器(设置文本颜色的时候,也可以设置对应的颜色选择器)

颜色选择器放到Color文件夹下

点击体验按钮的时候更新sp中的信息

4.主界面结构

参考结果图包含侧边栏和内容页

4.1>>>库项目 Library

①创建项目的时候可以标记为库

库项目和普通项目的区别

在projcet.properties中多了一行android.library = true;//如果为false就是普通项目

②用法

在库项目中的功能可以在别的项目中使用(添加库项目到别的项目的引用)

就可以使用它了(eclipse中右键别的项目的properties>>android>>add library)

与jar包的区别,不仅可以访问java文件,还可以访问资源文件

注意:所引入的库项目需要和当前项目在同一个盘符下

4.2 SlidingMenu开源项目介绍

①注意事项

导入example实例代码的时候报错,是因为缺乏一个Library(ABS开发ActionBar的标题栏,4.0以后才加入,2.X版本没有,所以第三方的开源框架就可以向下兼容,这里删掉就可以)

把实例代码里关于ActionBar有关的代码删掉就是

②使用方式:

引入库

继承的时候用SlidingActivity

如果既要侧拉框又要Fragement就继承SlidingFragmentActivity

onCreate()方法改成public的

设置侧边栏

setBehindContentView((布局文件)id);

设置右侧边栏

slidingMenu = getSlidingMenu()拿到SlidingMenu对象,

slidingMenu.setSecondaryMenu(布局文件);

slidingMenu.setMode(SlidingXXX.Left_RIGHT);//设置模式,左右都有侧边栏

设置全局触摸

slidingMenu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);

设置宽度

slidingMenu.setBehindOffset(200);//设置屏幕预留的宽度(并不是侧边栏宽度)

4.3项目使用侧边栏

①引入库

②设置好各种参数

supportV4包冲突问题:引入的库中有一个supportV4,自己的项目中也有一个v4包,所以冲突了,删除掉自己项目中的就可以了.

项目出现红色感叹号问题,java build path的问题,把出现X的地方删掉就行.

原文地址:https://www.cnblogs.com/adventurer/p/5662828.html