- 浏览: 71843 次
- 性别:
- 来自: 广州
最新评论
-
鱼在陆地上跑:
yanjunhui2011 写道http://download ...
Android自适应屏幕方向、大小和分辨率 -
yanjunhui2011:
http://download.csdn.net/detail ...
Android自适应屏幕方向、大小和分辨率 -
鱼在陆地上跑:
sydydream 写道<supports-screen ...
Android自适应屏幕方向、大小和分辨率 -
sydydream:
<supports-screens and ...
Android自适应屏幕方向、大小和分辨率 -
lenomon:
这里有篇实现无下划线的,Android使用TextView实现 ...
通过SpannableString来设置超链接、颜色、字体等属性(转)
整理自:http://www.cnmsdn.com/html/201109/1316004424ID10075.html
http://my.oschina.net/kzhou/blog/29157
Launcher的屏幕切换效果是Android操作系统的特色之一,具有很好的用户体验。
以前,实现这种效果需要参考Launcher的源代码来实现,既费时也费力。
在2011年3月份的时候,Android发布了一个被称为“compatibility package”的兼容开发包。该兼容开发包主要包含了Android最新平台上的最酷的特性,这样的话,当你在为旧版本的Android设备开发程序的时候,就可以使用这个兼容开发包来使用最新的Android特性,而不用自己重新开发,从而减轻了开发者的开发任务。通过其中的ViewPager类实现Launcher的屏幕切换效果就显得得心应手了。
首先,需要下载该兼容开发包。
通过”Android SDK and AVD Manager”可以下载,具体操作过程:
- 启动 SDK and AVD Manager.如果你使用的是Eclipse,可以通过菜单 Window > Android SDK and AVD Manager; 如果你使用的是Windows操作系统,可以通过sdk目录中的 “
SDK Manager.exe"来启动; 如果你使用的是linux系统 可以通过<sdk>/tools 目录中的android脚本来启动.
- 选择左边的”Available packages”,然后展开右边的” Android Repository”, 然后选择最下面的”Android Compatibility package ” 然后点击右下方的” Install selected”按钮.
- 等待安装完成后的提示信息.
使用下载工具(例如 迅雷)自己下载安装:
由于一些众所周知的原因,Google的服务在国*内时不时的不能正常使用, 在下载Andorid开发工具的时候也是如此, 有时候下载了80%了 结果提示下载失败! 如果您经常遇到这种情况或者下载速度很慢, 可以通过其他方式下载.
最新版本的兼容开发包的下载地址是: https://dl-ssl.google.com/android/repository/compatibility_r03.zip 大小是541696字节, 效验码(sha1)是”49e32c0aca8e52c2e9a398912a68c036583b917f” 下载完后把compatibility_r03.zip 这个文件解压到 <sdk>/extras/android/ 目录下即可. 解压后可以得到一个compatibility目录, 该目录下有各个版本的兼容开发包目录,上面下载的开发包包含2个版本 一个是v4;一个是v13. 每个目录下面分别包含示例代码和开发包的源代码.
如何使用兼容开发包
使用兼容开发包和使用第三方jar包一样,直接添加到项目引用的类库中就可以了:
- 在您的andorid项目跟目录中创建一个名称为”
libs"的目录
- 复制您要使用版本的兼容开发包到
libs/
目录.支持API Level 4 (Android 1.6)的jar包位于:<sdk>/extras/android/compatibility/v4/android-support-v4.jar
. - 把该jar包添加到类路径中.如果您使用Eclipse,只需要在Package Explorer中选中”libs”目录下的”android-support-v4.jar” 然后点击右键, 选中 Build Path > Add to Build Path. 添加成功后您会发现该jar包出现到了一个名称为”Referenced Libraries”的节点中.
现在您的app就可以使用兼容开发包了,所有支持的特性都在 android.support
包中 (例如, android.support.v4
).
至此准备环境已经ok
下边还是通过代码进行说话吧
准备布局文件
viewpager_layout.xml
<?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.support.v4.view.ViewPager android:id="@+id/viewpagerLayout" android:layout_height="fill_parent" android:layout_width="fill_parent"/> </LinearLayout>
layout1.xml
<?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"> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_width="fill_parent" android:text="第一页"></TextView> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText1"> <requestFocus></requestFocus> </EditText> </LinearLayout>
layout2.xml
<?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"> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_width="fill_parent" android:text="第二页"></TextView> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText1"> <requestFocus></requestFocus> </EditText> </LinearLayout>
layout3.xml
<?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"> <TextView android:textAppearance="?android:attr/textAppearanceLarge" android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_width="fill_parent" android:text="第三页"></TextView> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/editText1"> <requestFocus></requestFocus> </EditText> </LinearLayout>
主程序
package a.b; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; public class TestViewPager extends Activity { private ViewPager myViewPager; private MyPagerAdapter myAdapter; private LayoutInflater mInflater; private List<View> mListViews; private View layout1 = null; private View layout2 = null; private View layout3 = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.viewpager_layout); myAdapter = new MyPagerAdapter(); myViewPager = (ViewPager) findViewById(R.id.viewpagerLayout); myViewPager.setAdapter(myAdapter); mListViews = new ArrayList<View>(); mInflater = getLayoutInflater(); layout1 = mInflater.inflate(R.layout.layout1, null); layout2 = mInflater.inflate(R.layout.layout2, null); layout3 = mInflater.inflate(R.layout.layout3, null); mListViews.add(layout1); mListViews.add(layout2); mListViews.add(layout3); //初始化当前显示的view myViewPager.setCurrentItem(1); //初始化第二个view的信息 EditText v2EditText = (EditText)layout2.findViewById(R.id.editText1); v2EditText.setText("动态设置第二个view的值"); myViewPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int arg0) { Log.d("k", "onPageSelected - " + arg0); //activity从1到2滑动,2被加载后掉用此方法 View v = mListViews.get(arg0); EditText editText = (EditText)v.findViewById(R.id.editText1); editText.setText("动态设置#"+arg0+"edittext控件的值"); } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { Log.d("k", "onPageScrolled - " + arg0); //从1到2滑动,在1滑动前调用 } @Override public void onPageScrollStateChanged(int arg0) { Log.d("k", "onPageScrollStateChanged - " + arg0); //状态有三个0空闲,1是增在滑行中,2目标加载完毕 /** * Indicates that the pager is in an idle, settled state. The current page * is fully in view and no animation is in progress. */ //public static final int SCROLL_STATE_IDLE = 0; /** * Indicates that the pager is currently being dragged by the user. */ //public static final int SCROLL_STATE_DRAGGING = 1; /** * Indicates that the pager is in the process of settling to a final position. */ //public static final int SCROLL_STATE_SETTLING = 2; } }); } private class MyPagerAdapter extends PagerAdapter{ @Override public void destroyItem(View arg0, int arg1, Object arg2) { Log.d("k", "destroyItem"); ((ViewPager) arg0).removeView(mListViews.get(arg1)); } @Override public void finishUpdate(View arg0) { Log.d("k", "finishUpdate"); } @Override public int getCount() { Log.d("k", "getCount"); return mListViews.size(); } @Override public Object instantiateItem(View arg0, int arg1) { Log.d("k", "instantiateItem"); ((ViewPager) arg0).addView(mListViews.get(arg1),0); return mListViews.get(arg1); } @Override public boolean isViewFromObject(View arg0, Object arg1) { Log.d("k", "isViewFromObject"); return arg0==(arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { Log.d("k", "restoreState"); } @Override public Parcelable saveState() { Log.d("k", "saveState"); return null; } @Override public void startUpdate(View arg0) { Log.d("k", "startUpdate"); } } }
在实机上测试后,非常流畅,这也就是说官方版的左右滑屏控件已经实现
目前,关于viewpager的文章非常少,本文是通过阅读viewpager源代码分析出的写法
当然此文章仅是抛砖引玉,而且属于框架式程序,目的就是让读者了解API的基本用法
希望这篇原创文章对大家有帮助
欢迎感兴趣的朋友一起讨论
共同学习,共同进步
发表评论
-
Activity的启动与通信
2012-02-01 17:14 1449Activity是Android组件中最基本也是最常见的组件, ... -
【转】android通过USB使用真机调试程序
2012-02-01 11:04 1086转自:http://www.cnblogs.com/azai/ ... -
【转】实现自定义布局的Notification
2012-01-30 15:57 1532转自:http://blog.csdn.net/chenlon ... -
Eclipse 语法自动提示
2012-01-30 09:39 13251. 从Window -> preferences -& ... -
【转】Notification 详解
2012-01-29 16:08 1186转自:http://www.microdu.com/threa ... -
【转】Toast大全(五种情形)建立属于你自己的Toast
2012-01-29 13:51 1006转自:http://www.cnblogs.com/salam ... -
【转】Toast简易消息提示框的使用
2012-01-29 10:46 1194转自:http://www.2cto.com/kf ... -
实现Launcher的抽屉效果
2012-01-19 10:18 1186android 的 launcher 有一个抽屉效果,可以有拉 ... -
【整理】Android animation - 基础
2012-01-18 11:30 826整理自:http://blog.csdn.net/lzx_bu ... -
【转】编写高效的android代码
2012-01-17 10:00 861转自:http://www.2cto.com/kf/20111 ... -
【转】Android 分页控件制成底部菜单
2012-01-16 17:47 1856转自:http://blog.csdn.net/knowhea ... -
【转】android使用分页标签
2012-01-16 15:46 1205转自:http://marshal.easymorse.com ... -
【转】Eclipse调试常用技巧
2012-01-12 11:03 750转:http://chenhaodejia.iteye ... -
【转】Content Provider 基础 之URI
2012-01-12 10:42 1125转自:http://chenhaodejia.it ... -
【转】ImageButton点击背景切换事件
2012-01-12 10:31 2170转自:http://chenhaodejia.iteye.co ... -
【转】ContentProvider基础
2012-01-12 09:26 861转自:http://wq294948004.iteye.com ... -
使用bindService启动服务
2012-01-10 10:32 4869一般情况下我们使用startService(I ... -
Android SDCard操作(文件读写,容量计算)
2011-04-08 00:55 705Android SDCard操作(文件读写,容量计算) ... -
【转】Service创建有两种方法: startService或者bindService
2011-06-18 15:18 1101服务不能自己运行,需要通过调用Context.startSer ... -
【转】有按钮的ListView(使用自定义Adapter的方法)
2012-01-06 15:27 1638转自:http://www.cnblogs.com/allin ...
相关推荐
使用ViewPager实现高仿launcher拖动效果.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
Android-Idea博客:Android中如何使用ViewPager实现类似laucher左右拖动效果源码
android viewpager实现微信tab简单切换
ViewPager 使用ViewPager实现高仿launcher拖动效果.rar
本例是用Viewpager在android中实现的页面滑动效果,将代码导入eclipse即可运行。
Android利用ViewPager实现类微信的左右滑动效果,详细代码注解解析setOnPageChangeListener各参数意义以及使用方法
ViewPager实现五页面滑动切换、有兴趣的可以看下
通过ViewPager实现类似广告滚动的效果,滑动到哪一页小圆点也随之改变状态
viewPager实现activity的滑动切换或者禁止滑动切换
ViewPager实现多页面切换及动画效果(仿Android的Launcher效果),类似QQ多标签页面切换以及Android的Launcher效果
android源码-ViewPager实现微信页面切换效果 博客地址: 欢迎关注我!
viewpager实现图片切换
Android ViewPager实现仿QQ多页面滑动切换以及动画效果
通过ViewPager实现微信标题栏滑动效果,而且有消息提示的带数字红色实心圆的显示
ViewPager实现图片 小圆点切换
使用ViewPager+Fragment实现页面切换
高仿土巴兔选择装修风格的效果,这里通过自定义ViewPager来实现,为什么通过ViewPager来实现呢,一是ViewPager很容易实现切换动画效果,二是选择的那一项自动居中。项目地址:...
自定义ViewPager (禁止滑动和去除切换效果) viewPager.setNoScroll(true);//禁止手动滑动
ViewPager实现3D画廊效果,ViewPager的加载动画,主要介绍了ViewPager的setPageTransformer方法。
ViewPager实现的切换效果,共三种,可以作为引导动画,也可以作为页面切换。画面精美,尽情下载。