Android 实现WP7风格,ViewFlipper加入手势

1.最近看到很多windows phone 的风格挺漂亮的,所以着手做了一个。

2.说一下现实方法吧:主界面,当然要一个ViewFlipper,然后ViewFlipper里面可以放你喜欢多的Layout啊,因为ViewFlipper是一个帧布局的Widget,加入手势会有更好的效果。

最后写几个Animation的XML文件用于滑动特效。根据自己喜欢了,网上教程有很多,大家可以参考下。

3.下面是我的运行效果:

 

Android 实现WP7风格,ViewFlipper加入手势Android 实现WP7风格,ViewFlipper加入手势

 

 下面是主要代码,由于GridView中用到的Adapter是我自己封装baseAdapter的,有很多东西,所以就不给出来了。

  1 package com.MapBee.Act;

  2 

  3 

  4 

  5 

  6 

  7 import java.util.ArrayList;

  8 

  9 import android.app.Activity;

 10 import android.os.Bundle;

 11 import android.view.GestureDetector;

 12 import android.view.GestureDetector.OnGestureListener;

 13 import android.view.MotionEvent;

 14 import android.view.View;

 15 import android.view.View.OnTouchListener;

 16 import android.view.animation.AnimationUtils;

 17 import android.widget.GridView;

 18 import android.widget.ViewFlipper;

 19 

 20 import com.MapBee.Component.Adapter.CommonAdapter;

 21 import com.MapBee.Component.Adapter.WbLayoutInflater;

 22 import com.MapBee.Component.Listener.MyGustureListener;

 23 

 24 public class MyFlipperActivity extends Activity{

 25     /** Called when the activity is first created. */

 26     private ArrayList<Object> contentList;

 27     private ArrayList<Object> contentList1;

 28     private ViewFlipper flipper;

 29     private View itemView;

 30     private View itemView1;

 31     

 32     private GridView fliperGridView;

 33     private GridView fliperGridView1;

 34     private GestureDetector detector;

 35     

 36     @Override

 37     public void onCreate(Bundle savedInstanceState) {

 38         super.onCreate(savedInstanceState);

 39         setContentView(R.layout.main);

 40         contentList=new ArrayList<Object>();

 41         contentList1=new ArrayList<Object>();

 42         //add data 

 43         contentList.add("Contacts");

 44         contentList.add("Phone");

 45         contentList.add("Message");

 46         contentList.add("E-mail");

 47         contentList.add("Game");

 48         contentList.add("Foods");

 49         contentList.add("Game");

 50         contentList.add("Game");

 51         

 52         

 53         contentList1.add("Sports");

 54         contentList1.add("Sports");

 55         contentList1.add("Sports");

 56         contentList1.add("Sports");

 57         contentList1.add("Sports");

 58       

 59         

 60        

 61         

 62         flipper = (ViewFlipper) this.findViewById(R.id.main_ViewFlipper);//主界面

 63         itemView=getItemView();

 64         itemView1=getItemView1();

 65          MyGustureListener guestureListener=new MyGustureListener(this,flipper);

 66          detector = new GestureDetector(guestureListener);

 67         

 68     //set adpt

 69         

 70         fliperGridView=(GridView)itemView.findViewById(R.id.layout_flipview1_gridview);

 71         CommonAdapter adpt=new CommonAdapter(this, R.layout.layout_flipview_item,

 72                 R.id.layout_flipview_item_textName, 0x11, contentList);

 73         adpt.setItem_count(contentList.size());

 74         fliperGridView.setAdapter(adpt);
//这里需要注意,不加这个事件,在Gridview中无法触发手势事件,估计是GridView中的Scroll事件占优的原因吧。纯属个人观点有不同的欢迎交流
75 fliperGridView.setOnTouchListener(new OnTouchListener() { 76 77 public boolean onTouch(View v, MotionEvent event) { 78 // TODO Auto-generated method stub 79 return detector.onTouchEvent(event); 80 } 81 }); 82 83 //这里的CommonAdapter可以不用理会,自己写一个Adapter然后Set一下就OK了 84 fliperGridView1=(GridView)itemView1.findViewById(R.id.layout_flipview2_gridview); 85 CommonAdapter adapter=new CommonAdapter(this, R.layout.layout_flipview_item, 86 R.id.layout_flipview_item_textName, 0x11, contentList1); 87 adapter.setItem_count(contentList1.size()); 88 fliperGridView1.setAdapter(adapter);
 //这里需要注意,不加这个事件,在Gridview中无法触发手势事件,估计是GridView中的Scroll事件占优的原因吧。纯属个人观点有不同的欢迎交流
89 fliperGridView1.setOnTouchListener(new OnTouchListener() { 90 91 public boolean onTouch(View v, MotionEvent event) { 92 // TODO Auto-generated method stub 93 return detector.onTouchEvent(event); 94 } 95 }); 96 97 flipper.addView(itemView); 98 flipper.addView(itemView1); 99 100 101 102 103 } 104 105 public View getItemView(){ 106 WbLayoutInflater wli=new WbLayoutInflater(this); 107 wli.setViewFromItemLayout(R.layout.layout_flipview1); 108 return wli.getItemView(); 109 } 110 public View getItemView1(){ 111 WbLayoutInflater wli=new WbLayoutInflater(this); 112 wli.setViewFromItemLayout(R.layout.layout_flipview2); 113 return wli.getItemView(); 114 } 115 116 117 118 119 //这里是注册一个触发手势的事件。 120 public boolean onTouchEvent(MotionEvent event) { 121 122 if(detector.onTouchEvent(event)){ 123 System.out.println("fliperGridView on toch"); 124 return true; 125 } 126 else 127 return false; 128 129 } 130 131 132 133 134 }

 下面是Listener:

 1 package com.MapBee.Component.Listener;

 2 

 3 import android.app.Activity;

 4 import android.view.GestureDetector.OnGestureListener;

 5 import android.view.MotionEvent;

 6 import android.view.animation.AnimationUtils;

 7 import android.widget.ViewFlipper;

 8 

 9 import com.MapBee.Act.R;

10 

11 public class MyGustureListener implements OnGestureListener{

12     private Activity activity;

13     private ViewFlipper flipper;

14     public MyGustureListener(Activity activity,ViewFlipper flipper){

15         this.activity=activity;

16         this.flipper=flipper;

17     }

18     public boolean onDown(MotionEvent e) {

19         // TODO Auto-generated method stub

20         System.out.println("ondown");

21         return true;

22     }

23     //这是监听器主要的部分吧。手势要做什么就在这里写什么吧。 

24     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

25             float velocityY) {

26         if (e1.getX() - e2.getX() > 120) {

27             flipper.setInAnimation(AnimationUtils.loadAnimation(activity, R.anim.push_left_in));

28             flipper.setOutAnimation(AnimationUtils.loadAnimation(activity, R.anim.push_left_out));

29             flipper.showNext();

30             return true;

31         } else if (e1.getX() - e2.getX() < -120) {

32             flipper.setInAnimation(AnimationUtils.loadAnimation(activity, R.anim.push_right_in));

33             flipper.setOutAnimation(AnimationUtils.loadAnimation(activity, R.anim.push_right_out));

34             flipper.showPrevious();

35             return true;

36         }

37         return false;

38     }

39 

40     public void onLongPress(MotionEvent e) {

41         // TODO Auto-generated method stub

42         

43     }

44 

45     public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,

46             float distanceY) {

47         // TODO Auto-generated method stub

48         return true;

49     }

50 

51     public void onShowPress(MotionEvent e) {

52         // TODO Auto-generated method stub

53         

54     }

55 

56     public boolean onSingleTapUp(MotionEvent e) {

57         // TODO Auto-generated method stub

58         return true;

59     }

60 

61 }

 

你可能感兴趣的:(viewflipper)