本例使用ViewPager实现滑动切换的效果。本例涉及的ViewPager。为android.support.v4.view.ViewPager。所以须要在android项目中导入android-support-v4.jar。

       本例中ViewPager是实现滑动效果的核心部分。对其设置PageChangeListener监听事件,是实现滑动效果的核心思路。

【转载使用,请注明出处:http://blog.csdn.net/mahoking

       首先是主界面layout.xml文件。activity_03_viewpager.xml。

主界面的布局是顶部为页面标签,点击标签或滑动页面都能够实现切换页面的功能。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout android:layout_width="match_parent"
android:layout_height="40dp"
android:orientation="horizontal">
<TextView android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="选项卡01"
android:id="@+id/activity_03_viewpager_textview_01"/>
<TextView android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"
android:text="选项卡02"
android:gravity="center"
android:id="@+id/activity_03_viewpager_textview_02"/>
<TextView android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"
android:gravity="center"
android:text="选项卡03"
android:id="@+id/activity_03_viewpager_textview_03"/>
</LinearLayout>
<ImageView
android:id="@+id/cursor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="matrix"
android:src="@drawable/example03_cursor" /> <android.support.v4.view.ViewPager
android:id="@+id/activity_03_viewpager_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>

以上须要一个ImageView组件,该组件实现一种动态移动标签的效果,读者能够自行选择喜欢的标签下的底部长方形图片。可參考效果截图。

主Activity(ViewPagerActivity)的编写。

首先是全局变量的定义:

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;// 动绘图片宽度

本例提供了三个初始化布局空间的方法,分别为:initTextViews()、initImageView()、initViewPager()。

initTextViews()

private void initTextViews() {
t1 = (TextView) findViewById(R.id.activity_03_viewpager_textview_01);
t2 = (TextView) findViewById(R.id.activity_03_viewpager_textview_02);
t3 = (TextView) findViewById(R.id.activity_03_viewpager_textview_03); t1.setOnClickListener(new MyOnClickListener(0));
t2.setOnClickListener(new MyOnClickListener(1));
t3.setOnClickListener(new MyOnClickListener(2));
}

initImageView()

private void initViewPager() {

		mPager = (ViewPager) findViewById(R.id.activity_03_viewpager_vPager);
listViews = new ArrayList<View>();
LayoutInflater mInflater = getLayoutInflater();
listViews.add(mInflater.inflate(R.layout.layout_03_layout01, null));
listViews.add(mInflater.inflate(R.layout.layout_03_layout02, null));
listViews.add(mInflater.inflate(R.layout.layout_03_layout03, null));
mPager.setAdapter(new ViewPagerAdapter(listViews));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}

initViewPager()

/**
* 初始化动画
*/
private void initImageView() {
cursor = (ImageView) findViewById(R.id.cursor);
bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.example03_cursor)
.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);// 设置动画初始位置
}

有上述方法可见,本例须要两内部类MyOnClickListener、MyOnPageChangeListener,去处理监听事件。

MyOnClickListener

/**
* 点击监听事件
*
*/
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);
}
};

MyOnPageChangeListener

/**
*
*页卡切换监听
*/
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) {
}
}

在此补充一下。本例须要展示三个页卡,所以还须要三个页卡内容的界面设计。在这里我们仅仅设置了背景颜色,仅仅为起到差别作用。

layout_03_layout01.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#FF6666"> </LinearLayout>

效果截图:

 

【转载使用。请注明出处:http://blog.csdn.net/mahoking

【Android UI】案例03滑动切换效果的实现(ViewPager)的更多相关文章

  1. Android UI - 实现广告Banner旋转木马效果

    Android UI - 实现广告Banner旋转木马效果 前言 本篇博客要分享的一个效果是实现广告Banner轮播效果,这个效果也比較常见,一些视频类应用就常常有,就拿360影视大全来举例吧: 用红 ...

  2. 一分钟搞定触手app主页酷炫滑动切换效果

    代码地址如下:http://www.demodashi.com/demo/12826.html 前言: 前几天在看手机直播的时候,自己就用上了触手app.一进到主页就看上了里面页面切换的效果,自己想这 ...

  3. animate 实现滑动切换效果

    今天和大家分享一下用 animate 实现滑动切换效果的小例子 ------- 来自<一只有梦想的前端小白> 大家都知道jQuery 提供的有一下几种方法能够实现滑动效果: slideDo ...

  4. 【转】Android 实现ListView的滑动删除效果

    http://www.cnblogs.com/weixiao870428/p/3524055.html http://download.csdn.net/download/love_javc_you/ ...

  5. Flexslider图片轮播、文字图片相结合滑动切换效果

    Flexslider是一款基于的jQuery内容滚动插件.它能让你轻松的创建内容滚动的效果,具有非常高的可定制性.开发者可以使用Flexslider轻松创建各种图片轮播效果.焦点图效果.图文混排滚动效 ...

  6. 《JavaScript 实战》:JavaScript 图片滑动切换效果

    看到alibaba的一个图片切换效果,感觉不错,想拿来用用.但代码一大堆的,看着昏,还是自己来吧.由于有了做图片滑动展示效果的经验,做这个就容易得多了. 效果预览 仿淘宝/alibaba图片切换: 默 ...

  7. uni-app实现滑动切换效果

    在对于uni-app框架了解之后,今天就实现一个滚动切换tab效果,这个很常见的一个效果,最后封装成一个组件,便于以后使用,写这个需要引入uni官方提供的uni.css样式,用到了写好的样式,就不需要 ...

  8. 个人学习JQ插件编写成果:little酷炫的图片滑动切换效果

    工作一个多月了,好久没来冒冒泡了,看了@wayong的JQ插件教程,自己编写了一个模仿拉勾网首页广告栏滑动特效的JQ插件,现在跟朋友们分享分享! 先上demo链接:http://runjs.cn/de ...

  9. Android UI 之WaterFall瀑布流效果

        所谓瀑布流效果,简单说就是宽度相同但是高度不同的一大堆图片,分成几列,然后像水流一样向下排列,并随着用户的上下滑动自动加载更多的图片内容.     语言描述比较抽象,具体效果看下面的截图:   ...

随机推荐

  1. Tomcat详细用法学习(四)

    本篇接上一篇<Tomcat详细用法学习(三)>,主要讲解配置虚拟主机.打包web应用成war包和Tomcat的体系结构 对于Tomcat服务器,可以放置多个网站(多个web应用),这就是讲 ...

  2. 一个与Log4j相关的死锁(转)

    这个死锁的原因:一个动作需要两个临界对象.静态同步方法,就是一个临界对象.这种场景,静态同步方法每次只能有一个线程持有.如果存在另一个临界对象,静态同步方法中也需要获取这个临界对象.即一个动作需要两个 ...

  3. 【IOS实例小计】UIImageView

    预备知识: UIImage 是一个专门存储图片数据的对象,默认兼容的图片格式是 PNG,可以通过文件.Quartz image对象或 image Data数据得到一个图片对象. UIImage相关功能 ...

  4. 10165 - Stone Game(Nim游戏)

    UVA 10165 - Stone Game 题目链接 题意:给定n堆石子,每次能在一堆取1到多个.取到最后一个赢,问谁赢 思路:就裸的的Nim游戏,利用定理求解 代码: #include <s ...

  5. QMediaPlayer的duration问题

    遇到了一个坑QMediaPlayer::duration的坑. 这个坑是当你setMedia之后, 直接使用duration获取播放时长会得到0, 出错时候的代码片段例如以下: void MainWi ...

  6. ios添加pre和post build action

    再vs中,我们可以很方便的再build前.后执行一些脚本为我们做点什么事情.再ios中怎么搞呢,哪必然是对xcode进行操作了.再google搜索了一把,有说操作Scheme的也有说再直接再targe ...

  7. 14.4.3.3 Making the Buffer Pool Scan Resistant

    14.4.3.3 Making the Buffer Pool Scan Resistant 让Buffer Pool 扫描 相比使用一个严格的LRU算法, InnoDB 使用一个技术来最小化数据的总 ...

  8. My Emacs For Common Lisp

    My Emacs For Common Lisp My Emacs For Common Lisp

  9. THashMD5,THashSHA1,THashBobJenkins,TIdHashMessageDigest5的用法

    [delphi] view plain copy unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils ...

  10. http调试工具Charles Proxy用法详解

    Charles Proxy 通常称为Charles,Charles是目前最强大的http调试工具,在界面和功能上远强于Fiddler,同时是全平台支持,堪称圣杯级工具,不过在这里为您提供了Charle ...