Android利用ViewFlipper实现随手势滑动视图间切换
main.xml是首页布局文件:
- <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <viewflipper android:layout_width="fill_parent" android:id="@+id/myViewFlipper"
- android:layout_height="fill_parent">
- <linearlayout android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <imageview android:id="@+id/image1" android:src="@drawable/a1"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <linearlayout android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <imageview android:id="@+id/image1" android:src="@drawable/a2"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <linearlayout android:orientation="vertical"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
- <imageview android:id="@+id/image3" android:src="@drawable/a3"
- android:layout_width="fill_parent" android:layout_height="fill_parent">
在ViewFlipper中嵌套了3个LinearLayout,MainActivity主要代码如下:
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- viewFlipper = (ViewFlipper)findViewById(R.id.myViewFlipper);
- //在代码中增加ViewFlipper中的视图
- viewFlipper.addView(getLayoutInflater().inflate(R.layout.textlayout, null),viewFlipper.getChildCount());
- gestureDetector = new GestureDetector(new OnGestureListener() {
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public void onShowPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
- // TODO Auto-generated method stub
- return false;
- }
- @Override
- public void onLongPress(MotionEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
- if(velocityX>0){
- viewFlipper.showNext();
- }else {
- viewFlipper.showPrevious();
- }
- return false;
- }
- @Override
- public boolean onDown(MotionEvent e) {
- // TODO Auto-generated method stub
- return false;
- }
- });
- }
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- gestureDetector.onTouchEvent(event);
- return super.onTouchEvent(event);
- }
其中onFling方法实现了随手势左右滑动,视图间不断切换。
- viewFlipper.addView(getLayoutInflater().inflate(R.layout.textlayout, null),viewFlipper.getChildCount());
实现了在代码中添加View。关于手势的用法参见Android实现简单移动动画。