首页 > 代码库 > Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据

Android 中利用ViewFlipper 滑动屏幕切换页面,ListView展示数据

首先新建一个Android项目,命名为ViewFlipperTest

如图:项目机构,本项目主要操作图中红色箭头标注的文件

1.HgroupAdapter.java文件代码↓主要实现listview数据适配器的定义

 1 package com.hll.ViewFlipperTest;
 2 
 3 import java.util.List;
 4 
 5 import android.content.Context;
 6 import android.view.LayoutInflater;
 7 import android.view.View;
 8 import android.view.ViewGroup;
 9 import android.widget.BaseAdapter;
10 import android.widget.TextView;
11 
12 public class HgroupAdapter extends BaseAdapter {
13     private LayoutInflater mInflater;
14     int state;
15     Context mContext;
16     String mState;
17     List<String> mList;
18     int sel = 0;
19 
20     public HgroupAdapter(Context context, List<String> list, int menuState) {
21         this.mList = list;
22         this.mContext = context;
23         this.state = menuState;
24         mInflater = LayoutInflater.from(context);
25     }
26 
27     public int getCount() {
28         // if(mList == null){
29         // return 0;
30         // }
31         // return mList.size();
32         return 10;
33     }
34 
35     public Object getItem(int position) {
36         return mList.get(position);
37     }
38 
39     public long getItemId(int position) {
40         return position;
41     }
42 
43     public View getView(int position, View convertView, ViewGroup parent) {
44         final ViewHolder holder;
45         if (convertView == null) {
46             convertView = mInflater.inflate(R.layout.grouplist, null);
47             holder = new ViewHolder();
48             convertView.setTag(holder);
49         } else {
50             holder = (ViewHolder) convertView.getTag();
51         }
52         return convertView;
53     }
54 
55     static class ViewHolder {
56         TextView group_name;
57         TextView time;
58         TextView info;
59     }
60 }

2.ViewFlipperTest.java 程序启动的主文件↓

package com.hll.ViewFlipperTest;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ViewFlipper;

@SuppressLint("NewApi")
public class ViewFlipperTest extends Activity implements OnTouchListener,
        OnGestureListener, OnDoubleTapListener {
    private ViewFlipper mFlipper; // 翻转视图
    GestureDetector mGestureDetector; // 手势识别
    private int mCurrentLayoutState; // 当前布局状态
    private static final int FLING_MIN_DISTANCE = 2;
    private static final int FLING_MIN_VELOCITY = 200;

    TextView counttv;
    Button buttonNext1 = null;
    Button buttonNext2 = null;

    ListView lv1 = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        findView();
        setListener();
    }

    /*
     * 查找控件
     */
    @SuppressWarnings("deprecation")
    public void findView() {
        mFlipper = (ViewFlipper) findViewById(R.id.details);
        mFlipper.setLongClickable(true);
        mGestureDetector = new GestureDetector(this);
        mCurrentLayoutState = 0;

        counttv = (TextView) findViewById(R.id.counttv);
        buttonNext1 = (Button) findViewById(R.id.Button_next1);
        buttonNext2 = (Button) findViewById(R.id.Button_next2);
        lv1 = (ListView) findViewById(R.id.list1);

        lv1.setAdapter(new HgroupAdapter(this, null, 0));
    }

    public void setListener() {

        mFlipper.setOnTouchListener(this);
        lv1.setOnTouchListener(this);
        counttv.setText("9");
        buttonNext1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                mFlipper.showNext();
                counttv.setText("7");
            }
        });
        buttonNext2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                mFlipper.showNext();
                counttv.setText("8");
            }

        });
    }


    //
    protected Animation inFromRightAnimation() {
        Animation inFromRight = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, +1f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        inFromRight.setDuration(300);
        inFromRight.setInterpolator(new AccelerateInterpolator());
        return inFromRight;
    }

    protected Animation outToLeftAnimation() {
        Animation outtoLeft = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, -1f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        outtoLeft.setDuration(300);
        outtoLeft.setInterpolator(new AccelerateInterpolator());
        return outtoLeft;
    }

    protected Animation inFromLeftAnimation() {
        Animation inFromLeft = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, -1.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        inFromLeft.setDuration(300);
        inFromLeft.setInterpolator(new AccelerateInterpolator());
        return inFromLeft;
    }

    protected Animation outToRightAnimation() {
        Animation outtoRight = new TranslateAnimation(
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, +1.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f,
                Animation.RELATIVE_TO_PARENT, 0.0f);
        outtoRight.setDuration(300);
        outtoRight.setInterpolator(new AccelerateInterpolator());
        return outtoRight;
    }

    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        if (e1.getX() - e2.getX() > FLING_MIN_DISTANCE
                && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

            mFlipper.setInAnimation(inFromRightAnimation());
            mFlipper.setOutAnimation(outToLeftAnimation());
            mFlipper.showNext();
        } else if (e2.getX() - e1.getX() > FLING_MIN_DISTANCE
                && Math.abs(velocityX) > FLING_MIN_VELOCITY) {

            mFlipper.setInAnimation(inFromLeftAnimation());
            mFlipper.setOutAnimation(outToRightAnimation());
            mFlipper.showPrevious();
        }
        return false;
    }

    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "onLongPress", Toast.LENGTH_LONG)
        .show();
    }

    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
            float distanceY) {
        Toast.makeText(getApplicationContext(), "onScroll", Toast.LENGTH_LONG)
        .show();
        return false;
    }

    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "onShowPress", Toast.LENGTH_LONG)
        .show();
    }

    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "onSingleTapUp", Toast.LENGTH_LONG)
        .show();
        return false;
    }

    public boolean onTouch(View v, MotionEvent event) {
        return mGestureDetector.onTouchEvent(event);
    }

    public boolean onDoubleTap(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "onDoubleTap", Toast.LENGTH_LONG)
                .show();
        return false;
    }

    public boolean onDoubleTapEvent(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    public boolean onSingleTapConfirmed(MotionEvent e) {
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "onSingleTapConfirmed", Toast.LENGTH_LONG)
        .show();
        return false;
    }

}

3. main.xml 程序主界面布局文件↓

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="fill_parent"
 4     android:layout_height="fill_parent"
 5     android:background="@drawable/bg"
 6     android:orientation="vertical" >
 7 
 8     <FrameLayout
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:layout_gravity="right"
12         android:orientation="vertical" >
13 
14         <TextView
15             android:id="@+id/counttv"
16             android:layout_width="50dip"
17             android:layout_height="wrap_content"
18             android:layout_gravity="right"
19             android:background="@drawable/a4" />
20     </FrameLayout>
21 
22     <ViewFlipper
23         android:id="@+id/details"
24         android:layout_width="fill_parent"
25         android:layout_height="fill_parent"
26         android:autoStart="false"
27         android:flipInterval="1000"
28         android:inAnimation="@anim/push_left_in"
29         android:outAnimation="@anim/push_left_out"
30         android:persistentDrawingCache="animation" >
31 
32         <LinearLayout
33             android:layout_width="fill_parent"
34             android:layout_height="wrap_content"
35             android:orientation="vertical" >
36 
37             <Button
38                 android:id="@+id/Button_next1"
39                 android:layout_width="fill_parent"
40                 android:layout_height="wrap_content"
41                 android:text="Next1" >
42             </Button>
43 
44             <TextView
45                 android:id="@+id/info"
46                 android:layout_width="wrap_content"
47                 android:layout_height="wrap_content"
48                 android:layout_marginLeft="10dip"
49                 android:singleLine="true"
50                 android:text="系统消息"
51                 android:textSize="20dip" />
52 
53             <ListView
54                 android:id="@+id/list1"
55                 android:layout_width="fill_parent"
56                 android:layout_height="fill_parent"
57                 android:cacheColorHint="#00000000"
58                 android:divider="@drawable/divider_horizontal_bright" >
59             </ListView>
60         </LinearLayout>
61 
62         <LinearLayout
63             android:layout_width="fill_parent"
64             android:layout_height="wrap_content"
65             android:orientation="vertical" >
66 
67             <Button
68                 android:id="@+id/Button_next2"
69                 android:layout_width="fill_parent"
70                 android:layout_height="wrap_content"
71                 android:text="Next2" >
72             </Button>
73 
74             <ImageView
75                 android:id="@+id/image2"
76                 android:layout_width="fill_parent"
77                 android:layout_height="wrap_content"
78                 android:src=http://www.mamicode.com/"@drawable/mail3" >
79             </ImageView>
80         </LinearLayout>
81         
82     </ViewFlipper>
83 </LinearLayout>

4. grouplist.xml ListView 列表项模版文件↓

 1 <?xml version="1.0" encoding="utf-8"?> 
 2 <LinearLayout
 3       xmlns:android="http://schemas.android.com/apk/res/android"
 4       android:layout_width="fill_parent"
 5       android:layout_height="wrap_content"
 6       android:orientation="vertical"
 7       > 
 8     <LinearLayout
 9       android:layout_width="fill_parent"
10       android:layout_height="wrap_content"
11       android:orientation="horizontal"
12       > 
13             <TextView
14             android:layout_width="wrap_content"
15             android:layout_height="wrap_content"
16             android:textSize="18dip"
17             android:singleLine="true"
18             android:layout_marginLeft="10dip"
19             android:text="版本更新"
20             />
21             
22             <TextView
23             android:id="@+id/time"
24             android:layout_width="fill_parent"
25             android:layout_height="wrap_content"
26             android:textSize="18dip"
27             android:singleLine="true"
28             android:text="2010-11-01"
29             android:gravity="right"
30             android:layout_marginRight="6dip"
31             />
32      
33     </LinearLayout>
34     
35         <TextView
36             android:id="@+id/info"
37             android:layout_width="wrap_content"
38             android:layout_height="wrap_content"
39             android:textSize="16dip"
40             android:singleLine="true"
41             android:text="版本更新为2.1.1版本,请及时更新.网址..."
42             android:gravity="right"
43             android:layout_marginLeft="10dip"
44             />
45 </LinearLayout>

5.使用Android模拟器或者连接Android智能手机运行程序,滑动手机屏幕可以看到翻页的效果。

 本项目代码源于网络,感谢无私分享的人。