在我的博客中,上次是使用ViewPager实现左右滑动的效果的,请看文章:Android使用ViewPager实现左右滑动效果

这次我来使用ViewFlipper实现这种效果,好了,先看看效果吧:

效果看完了就来实现这个效果。

1.布局文件

主界面使用下面的布局:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical" >
  6. <ViewFlipper android:id="@+id/ViewFlipper1"
  7. android:layout_width="fill_parent"
  8. android:layout_height="fill_parent">
  9. </ViewFlipper>
  10. <LinearLayout
  11. android:orientation="horizontal"
  12. android:layout_width="wrap_content"
  13. android:layout_gravity="bottom|center_horizontal"
  14. android:layout_height="wrap_content"
  15. >
  16. <ImageView
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:src="@drawable/da"
  20. android:id="@+id/imageview1"
  21. />
  22. <ImageView
  23. android:layout_width="wrap_content"
  24. android:layout_height="wrap_content"
  25. android:src="@drawable/xiao"
  26. android:id="@+id/imageview2"
  27. />
  28. <ImageView
  29. android:layout_width="wrap_content"
  30. android:layout_height="wrap_content"
  31. android:src="@drawable/xiao"
  32. android:id="@+id/imageview3"
  33. />
  34. <ImageView
  35. android:layout_width="wrap_content"
  36. android:layout_height="wrap_content"
  37. android:src="@drawable/xiao"
  38. android:id="@+id/imageview4"
  39. />
  40. </LinearLayout>
  41. </FrameLayout>

简单的介绍一下布局文件:最外层是一个FrameLayout,使用FrameLayout就是为了是的下面的四个点在ViewFlipper上面。LayoutLayout在FrameLayout的下面和水平居中。

2.ViewFlipper的使用

  1. flipper = (ViewFlipper) this.findViewById(R.id.ViewFlipper1);
  2. flipper.addView(addImageView(R.drawable.png1o));
  3. flipper.addView(addImageView(R.drawable.png2o));
  4. flipper.addView(addImageView(R.drawable.png3o));
  5. flipper.addView(addView());

在Activity中声明一个ViewFlipper的对象,在布局中找到。将三张图片加到ViewFlipper中,另外再加一个View,这个View是从XML布局文件中得到的。布局文件如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Button
  8. android:id="@+id/button"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:layout_marginBottom="45dp"
  12. android:text="进入程序"
  13. android:textColor="#3E3E3E"
  14. android:layout_gravity="center_horizontal"
  15. />
  16. </LinearLayout>

在这个布局文件中有一个Button,用于跳转Activity用。

在Activity中声明一个GestureDetector对象,在onCreate方法中分配内存。

detector = new GestureDetector(this);

使用this为参数,那么就要使得activity类impllements  OnGestureListener接口。重写几个方法。覆盖父类的onTouchEvent方法,在这个方法中如下写:

  1. @Override
  2. public boolean onTouchEvent(MotionEvent event) {
  3. // TODO Auto-generated method stub
  4. return this.detector.onTouchEvent(event);
  5. }

这样就使得detector能接受消息响应了。

在实现OnGestureListener的方法中判断用户的滑动来切换界面:

  1. @Override
  2. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  3. float velocityY) {
  4. System.out.println("in------------>>>>>>>");
  5. ) {
  6. ) {
  7. i++;
  8. setImage(i);
  9. this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
  10. R.anim.animation_right_in));
  11. this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
  12. R.anim.animation_left_out));
  13. this.flipper.showNext();
  14. }
  15. return true;
  16. }
  17. ) {
  18. ) {
  19. i--;
  20. setImage(i);
  21. this.flipper.setInAnimation(AnimationUtils.loadAnimation(this,
  22. R.anim.animation_left_in));
  23. this.flipper.setOutAnimation(AnimationUtils.loadAnimation(this,
  24. R.anim.animation_right_out));
  25. this.flipper.showPrevious();
  26. }
  27. return true;
  28. }
  29. return false;
  30. }
  31. void setImage(int i)
  32. {
  33. ;j++)
  34. {
  35. if(j!=i)
  36. iamges[j].setImageResource(R.drawable.xiao);
  37. else
  38. iamges[j].setImageResource(R.drawable.da);
  39. }
  40. }

界面切换的时候改变下面的四个小ImageView的图片。切换的动画在res/anim文件夹中,这里就不多说了。

整个工程的下载:Android使用ViewFlipper实现左右滑动效果面

-------------------------------------------------------------------------------------------------------------------------------

在android的图片的浏览时候经常使用。最近在网上查找资料自己也做一个如下:

  1. package com.easyway.buttonpageflipper;
  2. import com.easyway.buttonpageflipper.R;
  3. import android.app.Activity;
  4. import android.graphics.PixelFormat;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.GestureDetector;
  9. import android.view.GestureDetector.OnGestureListener;
  10. import android.view.Gravity;
  11. import android.view.MotionEvent;
  12. import android.view.View;
  13. import android.view.WindowManager;
  14. import android.view.WindowManager.LayoutParams;
  15. import android.view.animation.AnimationUtils;
  16. import android.widget.ImageView;
  17. import android.widget.ViewFlipper;
  18. /**
  19. * Android实现带渐显按钮的左右滑动效果 自然状态下按钮不可见,触摸屏幕时显示按钮
  20. *
  21. * @author longgangbai
  22. *
  23. */
  24. public class ButtonpageflipperActivity extends Activity implements OnGestureListener{
  25. // 声明两个按钮,分别代表向左和向右滑动
  26. private ImageView btnLeft = null;
  27. private ImageView btnRight = null;
  28. // 设置WindowManager
  29. private WindowManager wm = null;
  30. private WindowManager.LayoutParams wmParams = null;
  31. // ImageView的alpha值
  32. ;
  33. private boolean isHide;
  34. private ViewFlipper viewFlipper = null;
  35. private GestureDetector detector;
  36. /** Called when the activity is first created. */
  37. @Override
  38. public void onCreate(Bundle savedInstanceState) {
  39. super.onCreate(savedInstanceState);
  40. setContentView(R.layout.main);
  41. setTitle("Android实现渐显按钮的左右滑动效果");
  42. viewFlipper = (ViewFlipper) this.findViewById(R.id.myViewFlipper);
  43. detector = new GestureDetector(this);
  44. // 初始化左右按钮
  45. initImageButtonView();
  46. viewFlipper.addView(addImageView(R.drawable.photo1));
  47. viewFlipper.addView(addImageView(R.drawable.photo2));
  48. viewFlipper.addView(addImageView(R.drawable.photo3));
  49. viewFlipper.addView(addImageView(R.drawable.photo4));
  50. viewFlipper.addView(addImageView(R.drawable.photo5));
  51. }
  52. private View addImageView(int id) {
  53. ImageView iv = new ImageView(this);
  54. iv.setImageResource(id);
  55. return iv;
  56. }
  57. /**
  58. * 初始化悬浮按钮
  59. */
  60. private void initImageButtonView() {
  61. // 获取WindowManager
  62. wm = (WindowManager) getApplicationContext().getSystemService("window");
  63. // 设置LayoutParams相关参数
  64. wmParams = new WindowManager.LayoutParams();
  65. // 设置window type
  66. wmParams.type = LayoutParams.TYPE_PHONE;
  67. // 设置图片格式,效果为背景透明
  68. wmParams.format = PixelFormat.RGBA_8888;
  69. // 设置Window flag参数
  70. wmParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
  71. | LayoutParams.FLAG_NOT_FOCUSABLE;
  72. // 设置x、y初始值
  73. ;
  74. ;
  75. // 设置窗口长宽数据
  76. ;
  77. ;
  78. // 创建左右按钮
  79. createLeftButtonView();
  80. createRightButtonView();
  81. }
  82. /**
  83. * 设置左边按钮
  84. */
  85. private void createLeftButtonView() {
  86. btnLeft = new ImageView(this);
  87. btnLeft.setImageResource(R.drawable.left);
  88. );
  89. btnLeft.setOnClickListener(new View.OnClickListener() {
  90. public void onClick(View arg0) {
  91. // 上一个图像
  92. viewFlipper.setInAnimation(ButtonpageflipperActivity.this,
  93. R.anim.push_left_in);
  94. viewFlipper.setOutAnimation(ButtonpageflipperActivity.this,
  95. R.anim.push_left_out);
  96. viewFlipper.showPrevious();
  97. }
  98. });
  99. // 调整窗口
  100. wmParams.gravity = Gravity.LEFT | Gravity.CENTER_VERTICAL;
  101. // 显示图像
  102. wm.addView(btnLeft, wmParams);
  103. }
  104. /**
  105. * 设置右边按钮
  106. */
  107. private void createRightButtonView() {
  108. btnRight = new ImageView(this);
  109. btnRight.setImageResource(R.drawable.right);
  110. );
  111. btnRight.setOnClickListener(new View.OnClickListener() {
  112. public void onClick(View arg0) {
  113. // 下一个图像
  114. viewFlipper.setInAnimation(ButtonpageflipperActivity.this,
  115. R.anim.push_right_in);
  116. viewFlipper.setOutAnimation(ButtonpageflipperActivity.this,
  117. R.anim.push_right_out);
  118. viewFlipper.showNext();
  119. }
  120. });
  121. // 调整窗口
  122. wmParams.gravity = Gravity.RIGHT | Gravity.CENTER_VERTICAL;
  123. // 显示图像
  124. wm.addView(btnRight, wmParams);
  125. }
  126. /**
  127. * 设置按钮渐显效果
  128. */
  129. private Handler mHandler = new Handler() {
  130. public void handleMessage(Message msg) {
  131. ) {
  132. // 通过设置不透明度设置按钮的渐显效果
  133. ;
  134. )
  135. ;
  136. btnLeft.setAlpha(mAlpha);
  137. btnLeft.invalidate();
  138. btnRight.setAlpha(mAlpha);
  139. btnRight.invalidate();
  140. )
  141. );
  142. ) {
  143. ;
  144. )
  145. ;
  146. btnLeft.setAlpha(mAlpha);
  147. btnLeft.invalidate();
  148. btnRight.setAlpha(mAlpha);
  149. btnRight.invalidate();
  150. )
  151. );
  152. }
  153. }
  154. };
  155. private void showImageButtonView() {
  156. isHide = false;
  157. );
  158. }
  159. private void hideImageButtonView() {
  160. new Thread() {
  161. public void run() {
  162. try {
  163. );
  164. isHide = true;
  165. );
  166. } catch (Exception e) {
  167. ;
  168. }
  169. }
  170. }.start();
  171. }
  172. @Override
  173. public boolean onTouchEvent(MotionEvent event) {
  174. this.detector.onTouchEvent(event);
  175. switch (event.getAction()) {
  176. case MotionEvent.ACTION_MOVE:
  177. case MotionEvent.ACTION_DOWN:
  178. showImageButtonView();
  179. break;
  180. case MotionEvent.ACTION_UP:
  181. hideImageButtonView();
  182. break;
  183. }
  184. return true;
  185. }
  186. @Override
  187. public void onDestroy() {
  188. super.onDestroy();
  189. // 在程序退出(Activity销毁)时销毁窗口
  190. wm.removeView(btnLeft);
  191. wm.removeView(btnRight);
  192. }
  193. @Override
  194. public boolean onDown(MotionEvent e) {
  195. // TODO Auto-generated method stub
  196. return false;
  197. }
  198. @Override
  199. public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
  200. float velocityY) {
  201. ) {
  202. this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_in));
  203. this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_left_out));
  204. this.viewFlipper.showNext();
  205. return true;
  206. ) {
  207. this.viewFlipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_in));
  208. this.viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(this, R.anim.push_right_out));
  209. this.viewFlipper.showPrevious();
  210. return true;
  211. }
  212. return false;
  213. }
  214. @Override
  215. public void onLongPress(MotionEvent e) {
  216. // TODO Auto-generated method stub
  217. }
  218. @Override
  219. public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
  220. float distanceY) {
  221. // TODO Auto-generated method stub
  222. return false;
  223. }
  224. @Override
  225. public void onShowPress(MotionEvent e) {
  226. // TODO Auto-generated method stub
  227. }
  228. @Override
  229. public boolean onSingleTapUp(MotionEvent e) {
  230. // TODO Auto-generated method stub
  231. return false;
  232. }
  233. }

Android使用ViewFlipper实现左右滑动效果面的更多相关文章

  1. Android 通过ViewFlipper实现广告轮播功能并可以通过手势滑动进行广告切换

    为了实现广告轮播功能,在网上找了很多方法,有的效果很好,但是代码太麻烦,并且大多是用的viewpager,总之不是很满意. 于是看了一下sdk有个控件是ViewFlipper,使用比较方便,于是尝试了 ...

  2. 【转】android ViewPager,ViewFlipper,ViewFlow实现左右滑动

    转自:http://blog.csdn.net/zhouyuanjing/article/details/8290454 开篇 首页只是作为ViewPager,ViewFlipper,ViewFlow ...

  3. android之ViewFlipper

    xml文件 activity-main.xml <ViewFlipper xmlns:android="http://schemas.android.com/apk/res/andro ...

  4. UI特效--Android利用ViewFlipper实现屏幕切换动画效果

    .屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面:一个个性化设置页面.2.介绍ViewFilpper类ViewFl ...

  5. Android利用ViewFlipper实现屏幕切换动画效果

    1.屏幕切换指的是在同一个Activity内屏幕见的切换,最长见的情况就是在一个FrameLayout内有多个页面,比如一个系统设置页面:一个个性化设置页面. 2.介绍ViewFilpper类 Vie ...

  6. Android中ViewFlipper的使用详解

    说到android的左右滑动效果我们可以说是在每个应用上面都可以看到这样的效果,不管是微博,还是QQ等. 实现左右滑动的方式很多,有ViewPager(不过这个和需要android-support-v ...

  7. android手势识别ViewFlipper触摸动画

    使用ViewFlipper来将您要来回拖动的View装在一起,然 后与GestureDetector手势识别类来联动,确定要显示哪个View,加上一点点动画效果即可.比如当手指向左快速滑动时跳转到上一 ...

  8. Android 实现两屏幕互相滑动

    Android 实现两屏幕互相滑动 下文来自: http://blog.csdn.net/song_shi_chao/article/details/7081664 ----------------- ...

  9. Android实现浮层的上下滑动(支持内部加入View)

    前言 我K.今天竟然是情人节.对于资深的单身狗来说,简直是个噩耗,今天注定是各种秀恩爱.心塞中.. .. 话题到此结束,管他什么情人节,今天给大家带来的是一个浮层的上下滑动,浮层滑动时分三种状态:所有 ...

随机推荐

  1. Thinkphp的时间判断

    在做项目的过程中,非常频繁地遇到时间这个问题,像时间的比较,特定时间执行某一操作,但是现在只解决了一部分问题,先说明一下时间的判断问题. 很简单,时间,不断使date(),now(),都是字符串类型的 ...

  2. 50行实现简易HTTP服务器

    话说由于一直很懒,所以博客好像也没怎么更新...今天有空就写一下吧. 最近在看node.js的时候开始对http协议感兴趣了,毕竟node一开始就是为了做web服务器而产生的.于是试着想了一下大概的思 ...

  3. flash跨域策略文件crossdomain.xml

    flash在跨域时唯一的限制策略就是crossdomain.xml文件,该文件限制了flash是否可以跨域读写数据以及允许从什么地方跨域读写数据. 位于www.a.com域中的SWF文件要访问www. ...

  4. MyEclipse配色字体等配置的解决方案

    Myeclipse黑色配色方案(精心修改版) http://download.csdn.net/detail/rehongchen/6579945 如何改变Myeclipse编辑区背景色 http:/ ...

  5. oracle job 定时执行 存储过程

    oracle job 定时执行 存储过程   一:简单测试job的创建过程案例: 1,先创建一张JOB_TEST表,字段为a 日期格式 SQL> create table JOB_TEST(a ...

  6. DRP总结

    DRP终于结束了,战线有点长了.记得刚开始听说DRP的时候,感觉这个名词很专业,再加上视频一共有300集,顿时感觉这是一个大项目,很正规.很专业的项目.虽然后来知道DRP知识ERP的一个分支,项目规模 ...

  7. Emotional Mastery——英语学习小技巧之一

    How can we control or manage our emotion ,so that we feel better and feel stronger when we're learni ...

  8. 浅谈API设计

    为什么需要了解一些API设计? 只要你编程,你就是API Designer 一个好的设计,模块之间的耦合应该也是API级别的 一个程序,如果你独立开发,那你既是API的Designer,也是API的U ...

  9. C++数据类型简析

    C++语言的基本数据类型有如下四种: 整型,说明符为int: 字符型,说明符为char: 浮点型(又称实型),说明符为float(单精度),double(双精度): 空值型,说明符为void,用于函数 ...

  10. C# 微信公众平台开发(1)-- 服务器配置

    题记:最近公司需要开发微信服务号,由本人负责,以前虽然听过微信开发,但并没有认真的去了解,项目开发中,也边看文档边开发,记录自己的项目开发经验: 1.注册帐号--填写服务器配置 在https://mp ...