在开始前,我们先要认识一个控件,ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。

这个附加包是android-support-v4.jar,在最后的源码中会提供给大家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。在新版本的android的adt中是默认附加这个jar包的。

界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。<?xml  version="1.0" encoding="utf-8"?>

xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

android:id="@+id/linearLayout1"

android:layout_width="fill_parent"

android:layout_height="100.0dip"

android:background="#FFFFFF" >

android:id="@+id/text1"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1.0"

android:gravity="center"

android:text="页卡1"

android:textColor="#000000"

android:textSize="22.0dip" />

android:id="@+id/text2"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1.0"

android:gravity="center"

android:text="页卡2"

android:textColor="#000000"

android:textSize="22.0dip" />

android:id="@+id/text3"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:layout_weight="1.0"

android:gravity="center"

android:text="页卡3"

android:textColor="#000000"

android:textSize="22.0dip" />

android:id="@+id/cursor"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:scaleType="matrix"

android:src="@drawable/a" />

android:id="@+id/vPager"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:layout_weight="1.0"

android:background="#000000"

android:flipInterval="30"

android:persistentDrawingCache="animation" />

我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。<?xml  version="1.0" encoding="utf-8"?>

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:background="#158684" >

代码部分要进行初始化的工作

(1) 先来变量的定义private ViewPager mPager;//页卡内容

private ListlistViews; // Tab页面列表

private ImageView cursor;// 动画图片

private TextView t1, t2, t3;// 页卡头标

private int offset = 0;// 动画图片偏移量

private int currIndex = 0;// 当前页卡编号

private int bmpW;// 动画图片宽度

(2) 初始化头标/**

* 初始化头标

*/

private void InitTextView() {

t1 = (TextView) findViewById(R.id.text1);

t2 = (TextView) findViewById(R.id.text2);

t3 = (TextView) findViewById(R.id.text3);

t1.setOnClickListener(new MyOnClickListener(0));

t2.setOnClickListener(new MyOnClickListener(1));

t3.setOnClickListener(new MyOnClickListener(2));

}

/**

* 头标点击监听

*/

public class MyOnClickListener implements View.OnClickListener {

private int index = 0;

public MyOnClickListener(int i) {

index = i;

}

@Override

public void onClick(View v) {

mPager.setCurrentItem(index);

}

};

相信大家看后都没什么问题,点击第几个,就展示第几个页卡内容。

(3) 初始化页卡内容区/**

* 初始化ViewPager

*/

private void InitViewPager() {

mPager = (ViewPager) findViewById(R.id.vPager);

listViews = new ArrayList();

LayoutInflater mInflater = getLayoutInflater();

listViews.add(mInflater.inflate(R.layout.lay1, null));

listViews.add(mInflater.inflate(R.layout.lay2, null));

listViews.add(mInflater.inflate(R.layout.lay3, null));

mPager.setAdapter(new MyPagerAdapter(listViews));

mPager.setCurrentItem(0);

mPager.setOnPageChangeListener(new MyOnPageChangeListener());

}

我们将三个页卡界面装入其中,默认显示第一个页卡。这里我们还需要实现一个适配器。/**

* ViewPager适配器

*/

public class MyPagerAdapter extends PagerAdapter {

public ListmListViews;

public MyPagerAdapter(ListmListViews) {

this.mListViews = mListViews;

}

@Override

public void destroyItem(View arg0, int arg1, Object arg2) {

((ViewPager) arg0).removeView(mListViews.get(arg1));

}

@Override

public void finishUpdate(View arg0) {

}

@Override

public int getCount() {

return mListViews.size();

}

@Override

public Object instantiateItem(View arg0, int arg1) {

((ViewPager) arg0).addView(mListViews.get(arg1), 0);

return mListViews.get(arg1);

}

@Override

public boolean isViewFromObject(View arg0, Object arg1) {

return arg0 == (arg1);

}

@Override

public void restoreState(Parcelable arg0, ClassLoader arg1) {

}

@Override

public Parcelable saveState() {

return null;

}

@Override

public void startUpdate(View arg0) {

}

}

这里我们实现了各页卡的装入和卸载/**

* 初始化动画

*/

private void InitImageView() {

cursor = (ImageView) findViewById(R.id.cursor);

bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.a)

.getWidth();// 获取图片宽度

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int screenW = dm.widthPixels;// 获取分辨率宽度

offset = (screenW / 3 - bmpW) / 2;// 计算偏移量

Matrix matrix = new Matrix();

matrix.postTranslate(offset, 0);

cursor.setImageMatrix(matrix);// 设置动画初始位置

}

根据屏幕的分辨率和图片的宽度计算动画移动的偏移量/**

* 页卡切换监听

*/

public class MyOnPageChangeListener implements OnPageChangeListener {

int one = offset * 2 + bmpW;// 页卡1 -> 页卡2 偏移量

int two = one * 2;// 页卡1 -> 页卡3 偏移量

@Override

public void onPageSelected(int arg0) {

Animation animation = null;

switch (arg0) {

case 0:

if (currIndex == 1) {

animation = new TranslateAnimation(one, 0, 0, 0);

} else if (currIndex == 2) {

animation = new TranslateAnimation(two, 0, 0, 0);

}

break;

case 1:

if (currIndex == 0) {

animation = new TranslateAnimation(offset, one, 0, 0);

} else if (currIndex == 2) {

animation = new TranslateAnimation(two, one, 0, 0);

}

break;

case 2:

if (currIndex == 0) {

animation = new TranslateAnimation(offset, two, 0, 0);

} else if (currIndex == 1) {

animation = new TranslateAnimation(one, two, 0, 0);

}

break;

}

currIndex = arg0;

animation.setFillAfter(true);// True:图片停在动画结束位置

animation.setDuration(300);

cursor.startAnimation(animation);

}

@Override

public void onPageScrolled(int arg0, float arg1, int arg2) {

}

@Override

public void onPageScrollStateChanged(int arg0) {

}

}

五、打完收工,快来看看自己的劳动成果吧

项目下载:DWinterTabDemo

android模拟qq进场动画,Android用ViewPager仿QQ实现多页面滑动及动画效果相关推荐

  1. android 模拟电脑按键精灵,Android 模拟点击 按键精灵 ADB方案

    Android 模拟点击的方案 模拟MotionEvent ADB控制 Instrumentation 通过使用sendevent 这里我们只讨论ADB控制方案,因为这个方案可以点击本APP以外的东西 ...

  2. android 仿qq修改头像,Qt:小项目仿QQ修改头像界面,技术点记录

    最近写了一个修改头像功能的UI,布局参考了QQ目前的修改头像界面.如下图 这里主要说明一下两个地方的技术:1.头像图片上层的遮罩层,圆形外部为灰色,内部为全透明:2.上传图片宽高比例可以通过鼠标拖拽移 ...

  3. android 仿搜索动画,Android仿京东顶部搜索框滑动伸缩动画效果

    最近使用京东发现,京东顶部的搜索框有一个新的伸缩效果,根据用户的手势滑动,伸缩搜索框.觉得效果还不错,就看了下其他的应用有没有这种伸缩的效果,发现安居客也使用了类似的一种效果,然后就想着实现这样的一种 ...

  4. android模拟微信聊天功能,android仿微信聊天界面 语音录制功能

    本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI. 1先看效果图: 第一:chat.xml设计 android:layout_width="fill_parent" and ...

  5. java仿qq登录 界面设计,Java Swing仿QQ登录界面效果

    本文实例为大家分享了Java Swing仿QQ登录界面展示的具体代码,供大家参考,具体内容如下 闲来无事将早些时候已实现的QQ登录界面再实现了一遍,纯手工打造(意思是没有用NetBeans.MyEcl ...

  6. html仿qq最小化怎么实现,JS仿QQ好友列表展开、收缩功能(第一篇)

    JS仿QQ好友列表展开.收缩功能(第一篇) 发布时间:2020-10-17 14:20:03 来源:脚本之家 阅读:96 作者:erdouzhang 效果图如下所示: html: 我的好友 张三 李四 ...

  7. android做题imageview缩放,巧用ViewPager实现驾考宝典做题翻页效果

    效果如下所示: 思路: a.利用ViewPager自带的动画效果,略作修改,实现滑动覆盖翻页效果. b.移动时加入阴影效果. 1.关键代码如下所示: public class ReaderViewPa ...

  8. android 模拟点击localinstrumentation,Android Instrumentation模拟鼠标点击事件

    看了几遍网上的博客一直没有 模拟出鼠标点击事件和按钮事件,后来抱着试试态度再重试的时候终于有所斩获.下面把具体的情况记录一下: 首先我们必须了解类 Instrumentation: Instrumen ...

  9. android 模拟来电广播,在Android模拟器上模拟来电

    最近项目要做一个控制来电显示的Android 应用 需要在Emulator上模拟来电 效果 方法如下: 1.单个电话 打开命令行cmd,输入telnet 回车. 然后输入 o localhost 55 ...

  10. android 模拟点击home,Android launcher中模拟按home键的实现

    Android launcher中模拟按home键的实现 Intent mHomeIntent = new Intent(Intent.ACTION_MAIN); mHomeIntent.addCat ...

最新文章

  1. c语言程序设计教程ppt,《C语言程序设计教程》.ppt
  2. asp.net后台代码动态添加JS文件和css文件的引用
  3. DOCX file format element list
  4. electron 读取文件夹内容_如何使用Electron Framework选择,读取,保存,删除或创建文件...
  5. [vue] 说说你对vue的表单修饰符.lazy的理解
  6. YouTube深度学习推荐系统的十大工程问题
  7. 使用NUnit和Moq测试ASP.NET Core MVC应用程序
  8. OO第一单元总结分析
  9. CheckBox的Attributes
  10. Windows操作系统dos常见用法与常见问题
  11. Picnic Planning
  12. Xcode 打包 framework
  13. Android手机打开开发者模式调试App
  14. 人到中年想学一门手艺自己创业好不好
  15. solidworks2014激活失效该怎么办?
  16. 钉钉开会使用虚拟摄像头
  17. matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...
  18. 【小米集团】2019校招在线考试-算法试卷编程题
  19. object-c中的对象的释放
  20. 你知道自己究竟“想要”什么,又该如何“做到”吗?--《认知觉醒》读书笔记

热门文章

  1. android x86 驱动精灵,手机驱动精灵软件下载(5个步骤即可解决)
  2. 微信小程序获取用户收货地址
  3. C++下的utility
  4. PTA_机工士姆斯塔迪奥
  5. 投入产出分析方法简介以及投入产出表
  6. ioi 赛制_徐明宽IOI2017参赛总结及他的信息学竞赛之路
  7. 基于STM32单片机的智能药盒带语音播报原理图程序
  8. 【友盟+】于晓航:大数据“格物致知”
  9. 【电子DIY】基于NE555制作的简易电子琴
  10. 2021西湖论剑web部分wp