zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    【HIDS】关于HIDS的一些看法
    图片在容器内水平垂直居中显示
    C++ 实现Cholesky分解
    Minikube 安装和简单使用
    关于.net的一些记录
    C#将窗体Form嵌入主窗体Panel中的一些问题
    Pod持久化
    Maven打包包含jar包
    Adam
    [漏洞]DNS Server Spoofed Request Amplification DDoS
  • 原文地址:https://www.cnblogs.com/jarrah/p/2442349.html
Copyright © 2011-2022 走看看