非出网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

微信(WeChat)是腾讯公司于2011年1月21日推出的一个为智能终端提供即时通讯服务的免费应用程序,由张小龙所带领的腾讯广州研发中心产品团队打造 。微信支持跨通信运营商、跨操作系统平台通过网络快速发送免费(需消耗少量网络流量)语音短信、视频、图片和文字,同时,也可以使用通过共享流媒体内容的资料和基于位置的社交插件“摇一摇”、“漂流瓶”、“朋友圈”、”公众平台“、”语音记事本“等服务插件。

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

  首先是开场闪屏的一个界面,使用handler控制该页面指定时间后进行跳转

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

  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);

  接着是主要的部分,也就是一系列的功能介绍图片,主要是viewpager来实现,嵌套在上面的小圆点的跟随导航也是要实现的效果之一

 

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

 

 

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

 

  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 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();

  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[i] = imageView;

  // 默认选中的是第一张图片,此时第一个小圆点是选中状态,其他不是

  if (i == 0)

  imageViews[i].setImageDrawable(getResources().getDrawable(

  R.drawable.page_indicator_focused));

  else

  imageViews[i].setImageDrawable(getResources().getDrawable(

  R.drawable.page_indicator_unfocused));

  // 将imageviews添加到小圆点视图组

  viewPoints.addView(imageViews[i]);

  }

  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[i].setImageDrawable(getResources().getDrawable(

  R.drawable.page_indicator_focused));

  // 其余设置为飞选中状态

  if (position != i)

  imageViews[i].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();

  }

  }

  而后的便是开门的动画效果了,这一块还是比较简单的,分别控制两幅图片的移动动画就可以实现

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

  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);

  }

  }

  最后进入到我们的登陆界面,就是一个简单的微信登陆布局,代码就不贴了

Android仿QQ微信开场导航以及登陆界面_安卓软件开发

微信支持多种语言,支持Wi-Fi无线局域网、2G,3G和4G移动数据网络,iOS版,Android版、Windows Phone版、Blackberry版、诺基亚S40版、S60V3和S60V5版



软件推荐:      



相关软件

2345安全卫士最新官方版

2345安全卫士官方版 | 45.34MB

2345安全卫士官方版

2345安全卫士是集电脑体检、木马查杀、垃圾清理、修复系统漏洞、系统加速、软件管理等功能为一体的电脑安全管理的软件.提供全方位检测,用户可以通过检测结果快速了解自己的电脑并且对电脑进行优化..

360杀毒软件官方正式版

360杀毒软件官方正式版 | 35.10MB

360杀毒软件官方正式版

360杀毒具有查杀率高、资源占用少、升级迅速等优点。零广告、零打扰、零胁迫,一键扫描,快速、全面地诊断系统安全状况和健康程度,并进行精准修复,带来安全、专业、有效、新颖的查杀防护体验...

360安全卫士最新版下载

360安全卫士最新版下载 | 50.3MB

360安全卫士最新版下载

360安全卫士是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐私,电脑专家,清理垃圾,清理痕迹...

QQ电脑管家官方正式版

QQ电脑管家官方正式版 | 24.2MB

QQ电脑管家官方正式版

腾讯电脑管家(Tencent PC Manager/原名QQ电脑管家)是腾讯公司推出的免费安全软件。拥有云查杀木马,系统加速,漏洞修复,实时防护,网速保护,电脑诊所,健康小助手...

金山毒霸2022最新版下载

金山毒霸2022下载 | 37MB

金山毒霸2018最新版下载

金山毒霸融合了启发式搜索、代码分析、虚拟机查毒等技术。经业界证明成熟可靠的反病毒技术,以及丰富的经验,使其在查杀病毒种类、查杀病毒速度、未知病毒防治等多方面达到世界先进水平...

猎豹清理大师官方版下载

猎豹清理大师下载 | 47.4MB

猎豹清理大师官方版下载

猎豹清理大师(原金山清理大师)是由金山网络开发的智能手机应用。它可以清理智能手机上的应用缓存、残余程序文件、历史痕迹以及应用程序安装包...