本讲主要讲解ViewPager与ViewFlipper,通过一个案例来让大家感受它们之间的区别。

案例:实现应用介绍导航界面。

案例效果图:

一.ViewPager实现代码:

(1)布局文件代码:

guide_viewpager.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" >
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</RelativeLayout>
</LinearLayout>

home.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:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="欢迎进入首页" />
</LinearLayout>

(2)功能代码:

ViewPagerActivity.java

package com.anjoyo.viewpager;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;

public class ViewPagerActivity extends Activity {

private ArrayList<View> pagerList;
private ViewPager viewPager;
private RelativeLayout mMainLayout;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide_viewpager);
mMainLayout = (RelativeLayout) this.findViewById(R.id.rl_main);
addMainLayout(mMainLayout);
}
private void addMainLayout(RelativeLayout layout) {
viewPager = new ViewPager(this);
createView();
RelativeLayout.LayoutParams params_cal = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(viewPager, params_cal);
}
private void createView() {
ImageView preView = new ImageView(ViewPagerActivity.this);
preView.setBackgroundResource(R.drawable.new_version_1);
ImageView currentView = new ImageView(ViewPagerActivity.this);
currentView.setBackgroundResource(R.drawable.new_version_2);
ImageView last_1_View = new ImageView(ViewPagerActivity.this);
last_1_View.setBackgroundResource(R.drawable.new_version_3);
ImageView last_2_View = new ImageView(ViewPagerActivity.this);
last_2_View.setBackgroundResource(R.drawable.new_version_4);
ImageView last_3_View = new ImageView(ViewPagerActivity.this);
last_3_View.setBackgroundResource(R.drawable.new_version_5);
last_3_View.setId(5);
pagerList = new ArrayList<View>();
pagerList.add(preView);
pagerList.add(currentView);
pagerList.add(last_1_View);
pagerList.add(last_2_View);
pagerList.add(last_3_View);
viewPager.setAdapter(new GuidePageAdapter());
last_3_View.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(ViewPagerActivity.this,
HomeActivity.class);
startActivity(intent);

}
});

}
class GuidePageAdapter extends PagerAdapter {

@Override
public int getCount() {
return pagerList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(View container, int position, Object object) {
((ViewPager) container).removeView(pagerList.get(position));

}
@Override
public Object instantiateItem(View container, int position) {
((ViewPager) container).addView(pagerList.get(position));
return pagerList.get(position);
}

}

}

HomeActivity.java

package com.anjoyo.viewpager;
import android.app.Activity;
import android.os.Bundle;
public class HomeActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}
}

(3)清单文件代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anjoyo.viewpager"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:name=".ViewPagerActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:name=".HomeActivity" >
</activity>
</application>
</manifest>

二.ViewFlipper实现代码

(1)布局文件代码:

guide.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" >
<RelativeLayout
android:id="@+id/rl_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</RelativeLayout>
</LinearLayout>

home.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:gravity="center"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:text="欢迎进入首页" />
</LinearLayout>

slide_left_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="100%p"
android:toXDelta="0" >
</translate>

</set>

slide_left_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="0"
android:toXDelta="-100%p" >
</translate>
</set>

slide_right_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="-100%p"
android:toXDelta="0" >
</translate>

</set>

slide_right_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >

<translate
android:duration="400"
android:fromXDelta="0"
android:toXDelta="100%p" >
</translate>

</set>

(2)功能代码:

GuideActivity.java

package com.anjoyo.gesture;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout.LayoutParams;
import android.widget.RelativeLayout;
import android.widget.ViewFlipper;

public class GuideActivity extends Activity {

private static final int SWIPE_MIN_DISTANCE = 120;//手势滑动的最短距离
private static final int SWIPE_THRESHOLD_VELOCITY = 200;//手势滑动最低滑动速度
private GestureDetector mGesture;//手势识别类
private ViewFlipper viewFlipper;

private Animation mSlideLeftIn;//左进动画
private Animation mSlideLeftOut;//左出动画
private Animation mSlideRightIn;//右进动画
private Animation mSlideRightOut;//右出动画
private RelativeLayout mMainLayout;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.guide);
mGesture = new GestureDetector(this, new MyOnGestureListener());
mMainLayout = (RelativeLayout) this.findViewById(R.id.rl_main);
addMainLayout(mMainLayout);

}
/*
* 初始界面
* */
private void addMainLayout(RelativeLayout layout) {
viewFlipper = new ViewFlipper(this);
createView();
RelativeLayout.LayoutParams params_cal = new RelativeLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
layout.addView(viewFlipper, params_cal);
}
//动画监听器
AnimationListener animationListener = new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}

@Override
public void onAnimationRepeat(Animation animation) {
}

@Override
public void onAnimationEnd(Animation animation) {
// 当动画完成后调用
createView();
}
};
/*
* 动态加载的界面View
* */
private void createView() {

ImageView preView = new ImageView(GuideActivity.this);
preView.setId(1);
preView.setBackgroundResource(R.drawable.new_version_1);
ImageView currentView = new ImageView(GuideActivity.this);
currentView.setBackgroundResource(R.drawable.new_version_2);
ImageView last_1_View = new ImageView(GuideActivity.this);
last_1_View.setBackgroundResource(R.drawable.new_version_3);
ImageView last_2_View = new ImageView(GuideActivity.this);
last_2_View.setBackgroundResource(R.drawable.new_version_4);
ImageView last_3_View = new ImageView(GuideActivity.this);
last_3_View.setBackgroundResource(R.drawable.new_version_5);
last_3_View.setId(5);

viewFlipper.addView(preView);
viewFlipper.addView(currentView);
viewFlipper.addView(last_1_View);
viewFlipper.addView(last_2_View);
viewFlipper.addView(last_3_View);
mSlideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_left_in);
mSlideLeftOut = AnimationUtils.loadAnimation(this,
R.anim.slide_left_out);
mSlideRightIn = AnimationUtils.loadAnimation(this,
R.anim.slide_right_in);
mSlideRightOut = AnimationUtils.loadAnimation(this,
R.anim.slide_right_out);

mSlideLeftIn.setAnimationListener(animationListener);
mSlideLeftOut.setAnimationListener(animationListener);
mSlideRightIn.setAnimationListener(animationListener);
mSlideRightOut.setAnimationListener(animationListener);
last_3_View.setOnTouchListener(null);
last_3_View.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Intent intent = new Intent(GuideActivity.this, HomeActivity.class);
startActivity(intent);

}
});
}

@Override
public boolean onTouchEvent(MotionEvent event) {
return mGesture.onTouchEvent(event);
}
//手机屏幕手势监听器
class MyOnGestureListener implements OnGestureListener {

@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
// 监听滚动事件
// Toast.makeText(MainActivity.this, "我被滚动了", 0).show();
return false;
}

@Override
public void onLongPress(MotionEvent e) {
// 监听长按事件
// Toast.makeText(MainActivity.this, "我被长按了", 0).show();
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// 监听左右滑动事件
// Toast.makeText(MainActivity.this, "我被滑动了", 0).show();
// right to left swipe
if (e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// Toast.makeText(MainActivity.this, "向左滑动了", 0).show();
if (viewFlipper.getCurrentView().getId() == 5) {

return false;
} else {
viewFlipper.setInAnimation(mSlideLeftIn);
viewFlipper.setOutAnimation(mSlideLeftOut);
viewFlipper.showNext();
return true;
}
// left to right swipe
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
// Toast.makeText(MainActivity.this, "向右滑动了", 0).show();
if (viewFlipper.getCurrentView().getId() == 1) {
return false;
} else {
viewFlipper.setInAnimation(mSlideRightIn);
viewFlipper.setOutAnimation(mSlideRightOut);
viewFlipper.showPrevious();
return true;
}

}
return false;
}
@Override
public boolean onDown(MotionEvent e) {
// 监听按下事件
// Toast.makeText(MainActivity.this, "我被按下了", 0).show();
return false;
}
}
}

HomeActivity.java

package com.anjoyo.gesture;
import android.app.Activity;
import android.os.Bundle;

public class HomeActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
}

}

(3)清单文件代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.anjoyo.gesture"
android:versionCode="1"
android:versionName="1.0" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".GuideActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".HomeActivity"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
</activity>
</application>
</manifest>

转载于:https://blog.51cto.com/zhangkeyong/1304043

Android应用开发系列课程------ViewPager与ViewFlipper较量相关推荐

  1. 【预告】1月6日下午14:30 CLR开发系列课程(3):COM Interop基础 (Level 300)

    1月6日下午14:30我将在MSDN中文网络广播中主讲.NET中COM和COM Interop的相关基础知识.有兴趣的朋友可以通过下面的链接登记并收听此次网络广播:  公共语言运行库(CLR)开发系列 ...

  2. 云开发系列课程让你从入门到精通快速上手Serverless和云开发技术

    简介:云开发系列课程主要介绍了从入门到精通快速上手Serverless和云开发技术.学习内容涵盖云开发协同.云函数.云数据库.多媒体托管.前后端一体化框架等Serverless Web开发必备知识.希 ...

  3. 基于WebMatrix的轻量级Web开发系列课程

    基于WebMatrix的轻量级Web开发系列课程(10): WebMatrix与ASP.NET MVC WebMatrix除了提供了默认的编程模型以外,也对ASP.NET MVC做出了很好的支持,但是 ...

  4. 预告:公共语言运行库(CLR)开发系列课程(4):COM Interop进阶

    这次我主要讲RCW的原理,生命周期,引用计数,套间,System.__ComObject,事件调用原理等内容.CCW由于时间限制就不涉及了,毕竟大家还是以使用RCW为主. 感兴趣的朋友可以在下面注册: ...

  5. Android蓝牙开发系列文章-蓝牙设备类型知多少?

    在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...

  6. android 相机编程,Android相机开发系列

    Android Camera Develop Series 简介 Android相机开发系列文章循序渐进,教你从一个没有任何功能的相机APP开始,逐步完善实现一般相机APP的各种功能,甚至还能拿来做图 ...

  7. Android蓝牙开发系列文章-蓝牙mesh(一)

    在<Android蓝牙开发系列文章-策划篇>中我们对蓝牙专题的内容进行整体规划,现在让我们一点点揭开他的面纱~ 本文是关于蓝牙mesh的首篇文章,由好友CSDN博主yk150915提供,在 ...

  8. Android商城开发系列

    Android商城开发系列(一)--开篇 Android商城开发系列(二)--App启动欢迎页面制作 Android商城开发系列(三)--使用Fragment+RadioButton实现商城底部导航栏 ...

  9. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能

    Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...

最新文章

  1. 如何使对话框中接收到WM_CHAR消息(Windows编程)
  2. 各种浏览器的userAgent
  3. 程序猿过年相亲:你总会遇到一个女孩,她不向你要钱,房子和车....
  4. ARP和RARP报头结构
  5. 通过Nacos让Nginx拥有服务发现能力
  6. 吴恩达深度学习 —— 2.13 逻辑回归的向量化
  7. 相邻省份最多的省区_拉萨万达广场开业 实现中国大陆省份全覆盖
  8. java 循环间隔执行一次,每隔Java运行一次循环
  9. feign 获取请求真实目的ip地址
  10. 使用tushare获取A股数据
  11. 网易云课堂计算机专业,网易云课堂“计算机专业课程”开课
  12. 谷歌浏览器插件自动点击程序
  13. 194.Vue.js智能扫码点餐系统(二十八)【支付宝支付流程、Nodejs支付源码解析、 实现支付功能(支付宝支付)】2019.04.01
  14. 战地2服务器怎么虚拟人数,战地2如何修改人数
  15. 各大AI研究院共35场NLP算法岗面经奉上
  16. 博客新地址http://zhen217.iteye.com/
  17. Mac 下抓包工具安装使用
  18. 1.2.密码应用安全性评估基本原理
  19. goland dlv 进行remote debug实验
  20. python 使用playsound模块出现编码问题。

热门文章

  1. php简单生成缩略图方法
  2. 等式变换java解法
  3. jquery学习之1.10-小练习-选中下拉框内容并显示
  4. [原创] ASP.NET 应用程序中使用定时器
  5. Struts2之struts-2.3.20开发环境的搭建并实现第一个Hello World小应用
  6. 组件:slot插槽、组件:组合slot
  7. Kafka产品迭代计划(RoadMap)
  8. JDK8利用Stream为集合对象分组并编号
  9. pgslq表的字段类型_Python 爬取微信公众号文章和评论 (基于 Fiddler 抓包分析)
  10. mesi协议怎么实现_volatile的底层实现原理