- 浏览: 79623 次
- 性别:
- 来自: 广州
最新评论
-
Tony_Lee-S:
已经说得很明白了吧?“把list强转成Serializable ...
在android中用 Intent 传递 List类型的数据(转) -
zhiduo5:
Activity与Service之间传递参数的介质这个怎么弄啊 ...
在android中用 Intent 传递 List类型的数据(转) -
mathlove:
很有用的内容
一个Android下的自动下载歌词的代码(转)
一、首先,我们来看一下效果图,这是新浪微博的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式,白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。好了,接下来我们就来实现它。
二、在开始前,我们先要认识一个控件,ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是android-support-v4.jar,在最后的源码中会提供给大家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。找到它后,我们需要在项目中添加
三、我们先做界面,
界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。
我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。
四、代码部分要进行初始化的工作
(1) 先来变量的定义
(2) 初始化头标
相信大家看后都没什么问题,点击第几个,就展示第几个页卡内容。
(3) 初始化页卡内容区
我们将三个页卡界面装入其中,默认显示第一个页卡。这里我们还需要实现一个适配器。
这里我们实现了各页卡的装入和卸载
(4) 初始化动画
根据屏幕的分辨率和图片的宽度计算动画移动的偏移量
实现页卡切换监听
五、打完收工,快来看看自己的劳动成果吧
转自:
http://www.eoeandroid.com/thread-157771-1-1.html
二、在开始前,我们先要认识一个控件,ViewPager。它是google SDk中自带的一个附加包的一个类,可以用来实现屏幕间的切换。这个附加包是android-support-v4.jar,在最后的源码中会提供给大家,在libs文件夹中。当然你也可以自己从网上搜索最新的版本。找到它后,我们需要在项目中添加
三、我们先做界面,
界面设计很简单,第一行三个头标,第二行动画图片,第三行页卡内容展示。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:umadsdk="http://schemas.android.com/apk/res/com.LoveBus" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="100.0dip" android:background="#FFFFFF" > <TextView 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" /> <TextView 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" /> <TextView 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" /> </LinearLayout> <ImageView android:id="@+id/cursor" android:layout_width="fill_parent" android:layout_height="wrap_content" android:scaleType="matrix" android:src="@drawable/a" /> <android.support.v4.view.ViewPager 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" /> </LinearLayout>
我们要展示三个页卡,所以还需要三个页卡内容的界面设计,这里我们只设置了背景颜色,能起到区别作用即可。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="#158684" > </LinearLayout>
四、代码部分要进行初始化的工作
(1) 先来变量的定义
private ViewPager mPager;//页卡内容 private List<View> listViews; // 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<View>(); 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 List<View> mListViews; public MyPagerAdapter(List<View> mListViews) { 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) { } }
这里我们实现了各页卡的装入和卸载
(4) 初始化动画
/** * 初始化动画 */ 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) { } }
五、打完收工,快来看看自己的劳动成果吧
转自:
http://www.eoeandroid.com/thread-157771-1-1.html
发表评论
-
SQLite多线程读写实践及常见问题总结(转)
2013-02-07 11:04 2962基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了 ... -
android内存溢出的解决方法(转)
2013-02-07 11:23 7621. 当项目中包含大量图片,或者图片过大 方法1:等比例缩 ... -
android中的跨进程通信的实现——远程调用过程和aidl(转)
2013-02-07 19:35 1300android在设计理念上强调组件化,组件之间的依赖性很小。 ... -
在EditText/TextView中插入表情图片、样式、下划线等(转)
2012-08-22 12:01 1561EditText: 通常用于显示文字,但有时候也需要在文字中 ... -
自定义Tab选项卡(转)
2012-08-21 08:44 1452效果: 代码: import android.app. ... -
android设置button透明度(转)
2012-08-18 22:09 1196Button或者ImageButton的背景设为透明或者半透明 ... -
Android中的TabHost(转)
2012-08-17 14:50 2171介绍 有时,我们想在一个window中显示多个视图,这时就需 ... -
Android开发之蓝牙(Bluetooth)操作(二)--修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备(转)
2012-08-15 16:54 1348一. 修改本机蓝牙设备的可见性 二. 扫描周围可用的蓝牙设备 ... -
Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备(转)
2012-08-15 16:49 1652一. 什么是蓝牙(Bluetooth)? 1.1 BuleT ... -
一个Android下的自动下载歌词的代码(转)
2012-08-15 13:41 10981. 原理是用Baidu音乐搜索的连接,拼参数进去读取歌词。 ... -
Android的Handler总结(转)
2012-08-14 14:18 834一、Handler的定义: 主要接受子线程 ... -
AsyncTask的用法(转)
2012-08-14 14:11 863在开发Android应用时必须遵守单线程模型的原则: Andr ... -
Android逐帧动画(转)
2012-08-13 16:46 1747Android有两种动画,一种是tweened animati ... -
android 扫描SD卡与系统文件(转)
2012-08-11 16:12 1271当手机或模拟器开机时,会调用android的MediaScan ... -
android 怎样为多媒体文件生成缩略图(转)
2012-08-10 17:11 12121、Video 对于视频,取第一帧作为缩略图,也就是怎样从fi ... -
TextView 实现自动换行(转)
2012-08-10 16:44 1362package com.liao.intentservice; ... -
android:屏幕自适应(转)
2012-08-10 16:10 1361demo下载: http://www.eoeandroid.c ... -
listview加载性能优化ViewHolder (转)
2012-07-28 15:16 1421在android开发中Listview是一个很重要的组件,它以 ... -
android 应用程序Activity之间数据传递与共享的几种途径(转)
2012-07-19 11:03 14731.基于消息的通信机制 Intent ---boudle , ... -
Android进程间通信--消息机制及IPC机制实现(转)
2012-07-19 10:51 800一、概念及说明 Android ...
相关推荐
Android ViewPager实现仿QQ多页面滑动切换以及动画效果
Android中用ViewPager实现多页面滑动切换及动画效果
主要介绍了Android编程实现ViewPager多页面滑动切换及动画效果的方法,以完整实例形式分析了ViewPager多页面滑动切换效果的布局及功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
viewpagerTab淡入淡出动画
ViewPager+Fragment打造滑动切换界面 导航条ObjectAnimator动画
使用ViewPager+Fragment实现页面点击切换和手势滑动,页面很流畅,有动画效果
主要介绍了Android使用TabLayou+fragment+viewpager实现滑动切换页面效果,需要的朋友可以参考下
功能介绍: 引导界面导航效果 ... 支持 ViewPager 各种切换动画 支持选中特定页面 支持监听 item 点击事件 加载网络数据时支持占位图设置,避免出现整个广告条空白的情况 多个 ViewPager 跟随滚动
Android利用ViewPager实现功能: 1、实现左右滑动(基本功能) 2、自动切换界面功能 3、退出提示功能(即2秒内按两次退出键退出程序) 4、显示gif动画 代码里有执行顺序提示,适合初学者。
CleverRecyclerView 是一个基于RecyclerView的扩展库,提供了与ViewPager类似的滑动效果并且添加了一些有用的特性。 效果图 特性 支持横/纵向滚动 支持设置一页可显示的item数量 支持设置滚动动画的时长 支持...
ViewPager就是一个简单的页面切换组件,我们可以往里面填充多个View,然后我们可以左右滑动,从而切换不同的View,我们可以通过setPageTransformer()方法为我们的ViewPager> 设置切换时的动画效果。和ListView,...
本文实例为大家分享了Android实现页面滑动切换动画的具体代码,供大家参考,具体内容如下 实现两个页面滑动切换,一些相册的效果也是如此 一个Activity的界面配置文件 activity_main.xml: <?xml version=1.0 ...
新特点是使用translateAnimation位移动画...之所以说是点的移动而不是点的切换是因为,运行代码滑动页面时真的可以看到像在Flash中绿点的移动效果。以往的方法只是一个点换成灰色图片,另一个换成绿色图片,没有移动。
像新浪微博的Tab,qq2012的Tab滑动效果。我们可以手势滑动,也可以点击上面的头标进行切换。与此同方式, 白色横条会移动到相应的页卡头标下。这是一个动画效果,白条是缓慢滑动过去的。
AndroidScreenSlide项目中有几个不错的效果, 一:Card Flip翻页立体效果,二:Screen Slide 左右切换view时候和新加载view呈现效果, ...四:Advanced Screen Slide切换viewpager时页面切换动画效果。