简易版QQ实现涉及的三个功能模块
引导界面
- splash界面(静态)
1、作用:初始化服务器端的一些数据,初始化成功后跳转到主界面
2、页面的延迟跳转:
//在主线程中:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Intent intent = new Intent(MyqqStartActivity.this,PagerActivity.class);
startActivity(intent);
MyqqStartActivity.this.finish();
}
}, 3000);
- 滑动页面ViewPager
(页面滑动的最后一页是一个按钮,点击后有个动画效果,动画结束之后跳转到主界面)
1、容器控件
里面可以防止多个Layout,实现了滑动翻页;
实现的大致步骤为:
①、将所有现实的页面加载到一个集合中
②、又滑加载新页面
③、左滑删除旧页面
实现的代码为:
xml定义ViewPager
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</android.support.v4.view.ViewPager
主代码中的实现:
mViewPager = (ViewPager) findViewById(R.id.viewpager);
LayoutInflater mLi = LayoutInflater.from(this);
View view1 = mLi.inflate(R.layout.viewpager_activity_item1, null);
View view2 = mLi.inflate(R.layout.viewpager_activity_item2, null);
View view3 = mLi.inflate(R.layout.viewpager_activity_item3, null);
final ArrayList<View> views = new ArrayList<View>();
views.add(view1);
views.add(view2);
views.add(view3);
PagerAdapter mPagerAdapter = new PagerAdapter() {
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return views.size();
}
@Override
public void destroyItem(View container, int position, Object object) {
// TODO Auto-generated method stub
((ViewPager) container).removeView(views.get(position));
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
((ViewPager) container).addView(views.get(position));
return views.get(position);
}
};
mViewPager.setAdapter(mPagerAdapter);
}
2、状态选择器
3. 动画效果
1、TwenedAnimations(API实现的)
①、Alpha:淡入淡出
②、Scale:缩放效果
③、Rotate:旋转效果
④、移动效果
2、FrameAnimations
把一个动画拆分成很多张图片;类似于连环画
3、创建动画效果的步骤
①、创建AnimationSet对象
②、根据需要创建相应的Animation对象(淡入淡出啊、这些)
③、创建的Animation对象设置参数
④、将Animation对象添加到AnimationSet中
⑤、使用控件对象开始执行Animation
4、例如设置移动的动画效果步骤:
AnimationSet anim = new AnimationSet(true);
// 1、确定类型:Absolute相对于屏幕,Relative to self相对于自己,Relative to parent相对于父控件
// 2、确定x的起始位置
// 3、确定x的模式
// 4、确定x的结束动画位置
// 5、Y与X一样
TranslateAnimation mytranslateanim = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
-1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
// 设置动画持续的时间
mytranslateanim.setDuration(2000);
// 确定动画开始的时间
anim.setStartOffset(800);
// 添加动画到AnimationSet中
anim.addAnimation(mytranslateanim);
//停留在最後的位置
anim.setFillAfter(true);
mLeft.startAnimation(anim);
主界面
- 网络请求数据
1、tomcat服务器
2、异步请求数据(Handler与AsyTask异步任务的区别)
3、Json数据的解析
json数据存放在tomcat的目录下,用自定义的方式编写json数据,网上有在线解析恭喜,来校验自己的json数据有没有写对。
常用的第三方解析框架:Jackson、Gson、JSONObject - 选项卡界面(tabHost + Fragment)
TabHost可以简单理解成一个容器控件、每一个选项卡对应一个布局而已
1、popuwindow
2、自定义Adapter
3、页面圆角处理 - 侧滑控件的实现
1、自定义ViewGroup
①、实现两个参数的构造方法
②、重写onMeasure方法测量控件高度
③、重写onLayout方法定义控件布局
④、重写onTouchEvent事件监听
实时通讯
- 即时通讯原理
①、XMPP
②、openFire
③、Socket - 第三方SDK的使用
环信即时通信Demo