Android仿QQ微信开场导航以及登陆界面
相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后 进入应用,这一效果适用于多种项目中,相信今后开发应用一定会用得到。网路上也有不少这样的例子可以参考,不过看别人的代码是一回事,自己实际做起来又是 另一回事,今天的这个微信的Demo是研究过多个类似的界面后自己动手去实现的效果,并且都加上了详细的注释(虽然有的多余),方便以后回顾一看就能看明 白,只有真正亲自写一写,体会才会更深刻,例子中的图片都是在微信的APK中提取出来的,涉及到的知识点无外乎是ViewPager和 Animation。
首先是开场闪屏的一个界面,使用handler控制该页面指定时间后进行跳转

[mw_shl_code=java,true]package com.example.weichat.UI;
import com.example.weichat.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
/** 开场欢迎动画 */
public class WelcomeA extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.strat);
//延迟两秒后执行run方法中的页面跳转
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(WelcomeA.this, WhatsnewPagesA.class);
startActivity(intent);
WelcomeA.this.finish();
}
}, 2000);
[/mw_shl_code]
接着是主要的部分,也就是一系列的功能介绍图片,主要是viewpager来实现,嵌套在上面的小圆点的跟随导航也是要实现的效果之一


[mw_shl_code=java,true]package com.example.weichat.UI;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.widget.ImageView;
import com.example.weichat.R;
/** What's new 的导航界面 */
public class WhatsnewPagesA extends Activity {
/** Viewpager对象 */
private ViewPager viewPager;
private ImageView imageView;
/** 创建一个数组,用来存放每个页面要显示的View */
private ArrayList<View> pageViews;
/** 创建一个imageview类型的数组,用来表示导航小圆点 */
private ImageView[] imageViews;
/** 装显示图片的viewgroup */
private ViewGroup viewPictures;
/** 导航小圆点的viewgroup */
private ViewGroup viewPoints;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
LayoutInflater inflater = getLayoutInflater();
pageViews = new ArrayList<View>();
pageViews.add(inflater.inflate(R.layout.viewpager01, null));
pageViews.add(inflater.inflate(R.layout.viewpager02, null));
pageViews.add(inflater.inflate(R.layout.viewpager03, null));
pageViews.add(inflater.inflate(R.layout.viewpager04, null));
pageViews.add(inflater.inflate(R.layout.viewpager05, null));
pageViews.add(inflater.inflate(R.layout.viewpager06, null));
// 小圆点数组,大小是图片的个数
imageViews = new ImageView[pageViews.size()];
// 从指定的XML文件中加载视图
viewPictures = (ViewGroup) inflater.inflate(R.layout.viewpagers, null);
viewPager = (ViewPager) viewPictures.findViewById(R.id.guidePagers);
viewPoints = (ViewGroup) viewPictures.findViewById(R.id.viewPoints);
// 添加小圆点导航的图片
for (int i = 0; i < pageViews.size(); i++) {
imageView = new ImageView(WhatsnewPagesA.this);
imageView.setLayoutParams(new LayoutParams(20, 20));
imageView.setPadding(5, 0, 5, 0);
// 吧小圆点放进数组中
imageViews = imageView;
// 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是
if (i == 0)
imageViews.setImageDrawable(getResources().getDrawable(
R.drawable.page_indicator_focused));
else
imageViews.setImageDrawable(getResources().getDrawable(
R.drawable.page_indicator_unfocused));
// 将imageviews添加到小圆点视图组
viewPoints.addView(imageViews);
}
setContentView(viewPictures);
viewPager.setAdapter(new NavigationPageAdapter());
// 为viewpager添加监听,当view发生变化时的响应
viewPager.setOnPageChangeListener(new NavigationPageChangeListener());
}
// 导航图片view的适配器,必须要实现的是下面四个方法
class NavigationPageAdapter extends PagerAdapter {
@Override
public int getCount() {
return pageViews.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
// 初始化每个Item
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(pageViews.get(position));
return pageViews.get(position);
}
// 销毁每个Item
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(pageViews.get(position));
}
}
// viewpager的监听器,主要是onPageSelected要实现
class NavigationPageChangeListener implements OnPageChangeListener {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
// 循环主要是控制导航中每个小圆点的状态
for (int i = 0; i < imageViews.length; i++) {
// 当前view下设置小圆点为选中状态
imageViews.setImageDrawable(getResources().getDrawable(
R.drawable.page_indicator_focused));
// 其余设置为飞选中状态
if (position != i)
imageViews.setImageDrawable(getResources().getDrawable(
R.drawable.page_indicator_unfocused));
}
}
}
// 开始按钮方法,开始按钮在XML文件中onClick属性设置;
// 我试图把按钮在本activity中实例化并设置点击监听,但总是报错,使用这个方法后没有报错,原因没找到
public void startbutton(View v) {
Intent intent = new Intent(WhatsnewPagesA.this, WhatsnewAnimationA.class);
startActivity(intent);
WhatsnewPagesA.this.finish();
}
}
[/mw_shl_code]
而后的便是开门的动画效果了,这一块还是比较简单的,分别控制两幅图片的移动动画就可以实现

[mw_shl_code=java,true]package com.example.weichat.UI;
import com.example.weichat.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
/**导航过后的动画效果界面*/
public class WhatsnewAnimationA extends Activity {
private ImageView img_left, img_right;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.whatnew_animation);
img_left = (ImageView) findViewById(R.id.doorpage_left);
img_right = (ImageView) findViewById(R.id.doorpage_right);
//创建一个AnimationSet对象
AnimationSet animLeft = new AnimationSet(true);
TranslateAnimation transLeft = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
-1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
//设置动画效果持续的时间
transLeft.setDuration(2000);
//将anim对象添加到AnimationSet对象中
animLeft.addAnimation(transLeft);
animLeft.setFillAfter(true);
img_left.startAnimation(transLeft);
transLeft.startNow();
//创建一个AnimationSet对象
AnimationSet animRight = new AnimationSet(true);
TranslateAnimation transRight = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0f, Animation.RELATIVE_TO_SELF,
1f, Animation.RELATIVE_TO_SELF, 0f,
Animation.RELATIVE_TO_SELF, 0f);
//设置动画效果持续的时间
transRight.setDuration(2000);
//将anim对象添加到AnimationSet对象中
animRight.addAnimation(transRight);
animRight.setFillAfter(true);
img_right.startAnimation(transRight);
transRight.startNow();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
Intent intent = new Intent(WhatsnewAnimationA.this, FirstPageA.class);
startActivity(intent);
WhatsnewAnimationA.this.finish();
}
}, 1000);
}
}
[/mw_shl_code]
最后进入到我们的登陆界面,就是一个简单的微信登陆布局,代码就不贴了

OK了,以上就是微信第一次使用的时候开场功能介绍和动画,比较使用,适用于为自己发布新产品的时候作为导航简介,大家可以根据具体要求具体设计,不过大致思路都是这样的。
Android仿QQ微信开场导航以及登陆界面的更多相关文章
- Android 仿QQ微信开场导航以及登陆界面
相信大家对于微信等社交应用的UI界面已经都很熟悉了,该UI最值得借鉴的莫过于第一次使用的时候一些列产品介绍的图片,可以左右滑动浏览,最后进入应 用,这一效果适用于多种项目中,相信今后开发应用一定会用得 ...
- android 仿QQ手机版
千人2群开启,欢迎大家围观打酱油,群号145667827 您当前位置 : JavaApk-安卓应用游戏源码服务专家 » QQ » Android项目源码界面超级华丽的仿QQ最新版本 Andro ...
- Android仿QQ ios dialog,仿QQ退出向上菜单
Android仿QQ ios dialog,仿QQ退出向上菜单 EasyDialog两种模式 仿QQ退出向上菜单,自己定义向上菜单 github地址:https://gith ...
- Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制)
Android 仿QQ首页的消息和电话的切换,首页的头部(完全用布局控制) 首先贴上七个控制布局代码 1.title_text_sel.xml 字体颜色的切换 放到color文件夹下面 <?xm ...
- Oauth2.0 QQ&微信&微博实现第三方登陆
一.写在前面 目前对于大多数的App或Web网站都支持有第三方登陆这个功能,用户可使用 QQ/ 微信/ 微博 帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户.最近在新项目上刚好用到了,在 ...
- Android仿QQ登录下拉历史列表
demo中包含了Sqlite数据库增删改查,对存储的账号进行按照最新的时间排序,限制了最多存储5条数据. 效果图: 1.首先创建MyHelper建表: public class MyHelper ex ...
- android仿qq空间、微信朋友圈图片展示
废话不多说,先上效果图 由于近期须要做朋友圈功能,所以在此记录一下,事实上非常多人不明确的一点应该是在图片的排列上面吧,不规则的排列,事实上非常easy的.就是一个GridView.然而你xml光光写 ...
- [转]ANDROID仿IOS微信滑动删除_SWIPELISTVIEW左滑删除例子
转载:http://dwtedx.sinaapp.com/itshare_290.html 本例子实现了滑动删除ListView的Itemdemo的效果.大家都知道.这种创意是来源于IOS的.左滑删除 ...
- Android仿QQ窗口的抖动的动画效果
就是仿照QQ窗口的抖动效果,在项目的res下创建anim文件夹,再创建两个xml文件:cycle.xml . myanim.xml cycle.xml : <?xml version ...
随机推荐
- liferay常用api总结
liferay之笑傲江湖学习笔记<一> 我们大家都知道,想要在一项技术上过硬,你需要付出汗水的,需要闭门修炼,每一个成功的人,都是那种耐得住寂寞的人,好了闲话少说.开始学习之旅 在life ...
- 网站建设中常用的JS代码段落
1.屏蔽左右键 这个不介绍了. <script language="JavaScript"> document.oncontextmenu=new Function(& ...
- yii2之创建管理员
第一步,使用迁移文件建表admin 先建立数据迁移文件: 小贴士,如果发现自己改错了,需要重新修改迁移文件 第二步,使用gii工具创建model 创建一个新的model,继承AdminAR,方便以后管 ...
- form表单提交 type="submit"
<form action="" method="post" onsubmit="return validte()"> < ...
- 20155308 2016-2017-2 《Java程序设计》第9周学习总结
20155308 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 第十六章 整合数据库 16.1 JDBC入门 驱动的四种类型 JDBC-ODBC Bridg ...
- cocoapods 配置
二.CocoaPods 安装 CocoaPods可以方便地通过Mac自带的RubyGems安装. 打开Terminal(Mac电脑自带的终端): (1).设置ruby的软件源 这是因为ruby的软件源 ...
- 【转】Redis之发布 订阅模式
本例包括 jedis_demo:入口类 jedis_control:jedis控制器(jedis的连接池) jedis_pub_sub_listener:订阅的监听器 singleton_agent: ...
- linux常用命令:df 命令
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- PDF常见问题总结
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- Linux服务器---配置apache支持用户认证
Apache支持用户认证 为了服务器的安全,通常用户在请求访问某个文件夹的时候,Apache可以要求用户输入有效的用户名和登录密码 1.创建一个测试目录 [root@localhost cgi-bin ...