在我的博客中,上次是使用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. Windows下载安装jmeter

    一.下载 jmeter下载地址: http://jmeter.apache.org/download_jmeter.cgi Binaries-apache-jmeter-3.0.zip 二.安装 1. ...

  2. struts2笔记02-action和Action类

    1.action      action表示一个struts2的请求! 2.Action类 能够处理struts2请求的类. (1)属性的名字需要与JavaBeans属性保持一致. 属性的类型可以是任 ...

  3. 添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)

    添加EF上下文对象,添加接口.实现类以及无处不在的依赖注入(DI) 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 上一章,我们介绍了安装和新建控制器.视图,这一章我们来创建 ...

  4. poj1936---subsequence(判断子串)

    #include<stdlib.h> #include<stdio.h> int main() { ],t[]; char *p1,*p2; while(scanf(" ...

  5. POJ 3111 K Best(最大化平均值)

    题目链接:click here~~ [题目大意]有n个物品的重量和价值各自是Wi和Vi.从中选出K个物品使得单位重量的价值最大,输出物品的编号 [解题思路]:最大化平均值的经典.參见click her ...

  6. Error pulling origin: error: The following untracked working tree files would be overwritten by...

    git在pull时,出现这样的错误的时候,可能非常多人进进行stash.相关stash的请看:Error pulling origin: error: Your local changes to th ...

  7. sqlite学习笔记4:表的创建和删除

    前面做了那么多不就是为了数据弄几张表么.接下来看看怎么新建表. 一 新建表 基本的语法例如以下: CREATE TABLE database_name.table_name( column1 data ...

  8. gridview中使用href调用javascript

    传递参数(多个)可用以下两种方法: 方法一: <asp:TemplateField HeaderText="列名1"> <ItemTemplate> < ...

  9. 关于matlab鼠标响应

    今天看了一下Matlab中响应鼠标的事件,整理如下, (1)函数WindowButtonMotionFcn,当鼠标在窗口上运动的时候就会相应此函数,于是在此函数中可以设置运动时想要的代码,如:改变鼠标 ...

  10. sql两表联合查询

    SELECT yt_fault_componentId FROM yt_fault_component a join yt_fault_assembly b on a.yt_fault_assembl ...