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

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

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

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

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

 下面是主要代码,由于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 }
原文地址:https://www.cnblogs.com/jarrah/p/2442349.html