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

android viewpager 左右滑动 android左右滑动是怎么做的_移动开发

 

android viewpager 左右滑动 android左右滑动是怎么做的_java_02

 

android viewpager 左右滑动 android左右滑动是怎么做的_布局文件_03

 

 

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

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.   
7. <ViewFlipper android:id="@+id/ViewFlipper1"  
8. android:layout_width="fill_parent"   
9. android:layout_height="fill_parent">  
10. </ViewFlipper>  
11.       
12.       
13.       
14. <LinearLayout  
15. android:orientation="horizontal"  
16. android:layout_width="wrap_content"  
17.           
18. android:layout_gravity="bottom|center_horizontal"  
19. android:layout_height="wrap_content"  
20.           
21. >  
22. <ImageView  
23. android:layout_width="wrap_content"  
24. android:layout_height="wrap_content"  
25. android:src="@drawable/da"  
26.             
27. android:id="@+id/imageview1"  
28. />  
29. <ImageView  
30. android:layout_width="wrap_content"  
31. android:layout_height="wrap_content"  
32. android:src="@drawable/xiao"  
33. android:id="@+id/imageview2"  
34. />  
35. <ImageView  
36. android:layout_width="wrap_content"  
37. android:layout_height="wrap_content"  
38. android:src="@drawable/xiao"  
39. android:id="@+id/imageview3"  
40. />  
41. <ImageView  
42. android:layout_width="wrap_content"  
43. android:layout_height="wrap_content"  
44. android:src="@drawable/xiao"  
45. android:id="@+id/imageview4"  
46. />  
47.               
48. </LinearLayout>  
49.   
50.   
51. </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.   
6.         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. >  
8. <Button  
9. android:id="@+id/button"  
10. android:layout_width="wrap_content"  
11. android:layout_height="wrap_content"  
12. android:layout_marginBottom="45dp"        
13. android:text="进入程序"  
14. android:textColor="#3E3E3E"   
15. android:layout_gravity="center_horizontal"  
16. />  
17. </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. "in------------>>>>>>>");  
5. if (e1.getX() - e2.getX() > 120) {  
6. if (i < 3) {  
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. else if (e1.getX() - e2.getX() < -120) {  
18. if (i > 0) {  
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. }  
32.   
33. void setImage(int i)  
34. {  
35. for(int j=0;j<4;j++)  
36.     {  
37. if(j!=i)  
38.         iamges[j].setImageResource(R.drawable.xiao);  
39. else  
40.             iamges[j].setImageResource(R.drawable.da);  
41.     }  
42. }


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

 


 

 

 

 

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

 

 



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

 

 


  


android viewpager 左右滑动 android左右滑动是怎么做的_android_04


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